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

如何在PySpark中将指定格式的日期字符串转换为timestamp类型

PySpark日期字符串转Timestamp的解决方案

你返回null的核心原因是指定的时间格式模板和实际输入的字符串格式不匹配:你输入的'06/21/2021 9:27 AM'中分钟后没有秒数,但你使用的格式串MM/dd/yyyy hh:mm:ss a多了秒的占位符ss,导致解析失败返回null。

解决方案

写法1:修正原有逻辑的格式串

把格式串中的ss删除,调整为MM/dd/yyyy h:mm a即可正常解析:

from pyspark.sql.functions import unix_timestamp, from_unixtime
from pyspark.sql.types import TimestampType

df = df.select(
  from_unixtime(unix_timestamp('date_string', 'MM/dd/yyyy h:mm a')).cast(TimestampType()).alias("date_timestamp")
)

写法2(更推荐):直接使用to_timestamp函数

PySpark 2.2及以上版本可以直接用to_timestamp完成转换,不需要两层函数嵌套,代码更简洁高效:

from pyspark.sql.functions import to_timestamp

df = df.select(
  to_timestamp('date_string', 'MM/dd/yyyy h:mm a').alias("date_timestamp")
)

补充说明

如果输入的小时可能出现两位格式(例如06/21/2021 09:27 AM),把格式串调整为MM/dd/yyyy hh:mm a即可同时兼容一位、两位的12小时制小时数值。

你可以用以下测试代码验证效果:

from pyspark.sql import SparkSession
from pyspark.sql.functions import to_timestamp

# 初始化SparkSession
spark = SparkSession.builder.appName("date_convert_test").getOrCreate()
# 构造测试数据集
test_df = spark.createDataFrame([("06/21/2021 9:27 AM",)], ["date_string"])
# 执行转换并打印结果
test_df.select(
  to_timestamp("date_string", "MM/dd/yyyy h:mm a").alias("date_timestamp")
).show(truncate=False)

正常输出结果如下:

+-------------------+
|date_timestamp     |
+-------------------+
|2021-06-21 09:27:00|
+-------------------+

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 00:39:00