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

PySpark将Unix时间戳转换为UTC时区的yyyy-MM-dd HH:mm:ss格式

正确将Unix时间戳(bigint)转换为UTC时区的格式化字符串

方法一:使用from_unixtime指定UTC时区(Spark 3.0+)

Spark 3.0及以上版本的from_unixtime支持第三个参数指定时区,直接传入'UTC'即可生成UTC时区的格式化字符串:

import pyspark.sql.functions as F

time_df.select(
    'epoch',
    F.from_unixtime(F.col('epoch'), 'yyyy-MM-dd HH:mm:ss', 'UTC').alias('utc_time')
).show()

输出结果:

+----------+-------------------+
|     epoch|          utc_time|
+----------+-------------------+
|1651886168|2022-05-07 01:16:08|
+----------+-------------------+

方法二:先转UTC时区的Timestamp再格式化(兼容Spark 2.x)

如果使用Spark 2.x版本,from_unixtime不支持时区参数,可以通过to_timestamp结合from_utc_timestamp处理:

time_df.select(
    'epoch',
    F.date_format(
        F.from_utc_timestamp(F.to_timestamp(F.col('epoch')), 'UTC'),
        'yyyy-MM-dd HH:mm:ss'
    ).alias('utc_time')
).show()

原方法错误原因

  • 错误方法1:from_unixtime默认使用Spark Session的本地时区解析时间戳,因此返回本地时间。
  • 错误方法2:直接将epoch cast为timestamp时,Spark会按本地时区解析Unix时间戳,得到的timestamp已是本地时间,后续转换自然错误。
  • 错误方法3:基于错误的本地时间timestamp继续处理,结果必然还是本地时间。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 02:50:33