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

PySpark中时间戳转换:Epoch与日期互转及精度识别

技术问题解答

1. Epoch时间戳1668443121840转日期2022-11-14T16:25:21.840+0000的具体过程

这个时间戳是毫秒级精度(共13位),转换步骤如下:

  1. 拆分秒数与毫秒部分:将1668443121840除以1000,得到整数秒1668443121,剩余的840是毫秒部分。
  2. 转换为UTC datetime对象:用Python的datetime.utcfromtimestamp(1668443121)得到基础时间2022-11-14 16:25:21。
  3. 拼接毫秒并格式化时区:将毫秒部分添加到时间中,再格式化为带UTC时区的字符串,最终得到2022-11-14T16:25:21.840+0000。

对应Python代码示例:

import datetime
ts = 1668443121840
# 转换为带毫秒的UTC时间
utc_dt = datetime.datetime.utcfromtimestamp(ts / 1000)
# 格式化目标字符串
formatted = utc_dt.strftime('%Y-%m-%dT%H:%M:%S.%f')[:-3] + '+0000'
print(formatted)  # 输出:2022-11-14T16:25:21.840+0000

2. 如何识别Epoch时间戳的精度

主要通过位数长度和转换验证判断:

  • 10位:秒级精度,例如1668443121对应2022年左右的时间。
  • 13位:毫秒级精度,例如问题中的1668443121840。
  • 16位:微秒级精度,例如1668443121840123。
  • 19位:纳秒级精度,例如1668443121840123456。
    如果位数不典型,可以尝试按不同精度转换为日期:若按秒转换得到合理的近期时间,就是秒级;若得到的时间是未来几百年,则说明是更高精度(比如把毫秒当成秒的话,时间会是5万多年后)。

3. PySpark中将日期转回Epoch时间戳的函数及精度控制

PySpark提供多个函数支持不同精度的转换:

  • 秒级时间戳:用unix_timestamp函数,默认解析yyyy-MM-dd HH:mm:ss格式,也可指定格式:
    from pyspark.sql.functions import unix_timestamp
    df.withColumn("epoch_seconds", unix_timestamp("date_col", "yyyy-MM-dd HH:mm:ss"))
    
  • 毫秒级时间戳:用unix_millis函数(需Spark 3.0+),接收TimestampType类型的列:
    from pyspark.sql.functions import unix_millis, to_timestamp
    df.withColumn("epoch_millis", unix_millis(to_timestamp("date_col", "yyyy-MM-dd HH:mm:ss")))
    
  • 微秒/纳秒级:对应unix_micros、unix_nanos函数,用法和unix_millis类似。

关于你Python代码的问题

你用strftime('%s')只能输出秒级时间戳,且该写法在部分Python版本/系统中兼容性差。要控制精度,建议用datetime.timestamp()方法,再乘以对应倍数:

import datetime
t = datetime.datetime.strptime('2021-11-12 02:12:23', '%Y-%m-%d %H:%M:%S')
# 秒级
print(int(t.timestamp()))
# 毫秒级
print(int(t.timestamp() * 1000))
# 微秒级
print(int(t.timestamp() * 1_000_000))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 15:30:54