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

如何在PySpark中转换Databricks里的Datetime格式以适配API要求?

解决PySpark中Datetime字段格式转换问题

要将格式为2022-07-06 16:43:18.696 +0100的Datetime字段转换为2022-07-06T16:43:18.8000000+00:0格式(UTC时区、7位秒小数、T分隔符),可以通过以下PySpark步骤实现:

方法一(Spark 3.0+推荐)

利用to_timestamp_tz解析带时区的时间字符串,转换到UTC后格式化,再调整时区标识:

from pyspark.sql import functions as F

# 假设数据框名为df,原始时间字段名为original_datetime
df = df.withColumn(
    "target_datetime",
    F.regexp_replace(
        # 解析原始时间为带时区类型,转UTC后按指定格式输出
        F.date_format(
            F.to_timestamp_tz(F.col("original_datetime"), "yyyy-MM-dd HH:mm:ss.SSS Z").at_timezone("UTC"),
            "yyyy-MM-dd'T'HH:mm:ss.SSSSSSSXXX"
        ),
        # 将标准UTC时区标识+00:00替换为目标格式的+00:0
        r"\+00:00", "+00:0"
    )
)

方法二(兼容旧版本Spark)

如果使用Spark 3.0以下版本,可通过to_timestamp结合to_utc_timestamp实现:

from pyspark.sql import functions as F

df = df.withColumn(
    "utc_timestamp",
    # 先解析原始时间,再转换到UTC时区
    F.to_utc_timestamp(F.to_timestamp(F.col("original_datetime"), "yyyy-MM-dd HH:mm:ss.SSS Z"), "UTC")
).withColumn(
    "target_datetime",
    F.concat(
        # 格式化日期时间部分到6位秒小数
        F.date_format(F.col("utc_timestamp"), "yyyy-MM-dd'T'HH:mm:ss.SSSSSS"),
        # 补第7位零,拼接目标时区标识
        F.lit("0+00:0")
    )
)

关键说明

  • 原始时间格式yyyy-MM-dd HH:mm:ss.SSS Z中,Z对应时区偏移(如+0100),确保解析时格式符完全匹配。
  • 目标格式的7位秒小数:Spark的date_format中SSSSSSS会自动将3位毫秒补零到7位(如.696变为.6960000)。
  • 时区转换:必须将原始时间转换为UTC时区,再生成目标格式的时区标识+00:0。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 15:50:36