You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PySpark如何将带T、Z的日期时间字符串转换为timestamp类型

问题原因

你当前使用的格式字符串和实际存储的日期时间格式不匹配,这是返回空值的核心原因,漏写了多个必填匹配项:

  • 日期和时间段之间的固定分隔符T未声明
  • 秒和小数秒之间的分隔符是.,不是你代码中写的:
  • 输入时间包含7位小数秒,且末尾有标识UTC时区的固定字符Z,原格式串未覆盖这两部分
正确实现方案

基础版(严格匹配你给出的样例格式,Spark 3.0+适用)

from pyspark.sql.functions import to_timestamp, col

df3.select(
    to_timestamp(col("DateTime"), "yyyy-MM-dd'T'HH:mm:ss.SSSSSSS'Z'").alias('dt'),
    col("DateTime")
).show()

兼容版(适配小数秒位数不固定的场景)

如果同列下不同行的小数秒位数有3位、6位、7位的差异,可以用方括号标记可选匹配段:

df3.select(
    to_timestamp(col("DateTime"), "yyyy-MM-dd'T'HH:mm:ss[.SSSSSSS][.SSSSSS][.SSS]'Z'").alias('dt'),
    col("DateTime")
).show()

低版本Spark兼容方案

如果你使用的是Spark 2.x,不支持解析3位以上的小数秒,可以先做字符串截断后再转换:

from pyspark.sql.functions import substring

df3.select(
    to_timestamp(substring(col("DateTime"), 1, 23), "yyyy-MM-dd'T'HH:mm:ss.SSS").alias('dt'),
    col("DateTime")
).show()

时区转换可选配置

末尾的Z代表UTC时区,如果你需要转换为国内东八区时间,可以传入时区参数:

df3.select(
    to_timestamp(col("DateTime"), "yyyy-MM-dd'T'HH:mm:ss.SSSSSSS'Z'")
        .withTimeZone("Asia/Shanghai")
        .alias('dt_cst'),
    col("DateTime")
).show()

内容的提问来源于stack exchange,提问作者thedataguy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 03:54:07