Python处理时间戳需区分秒级/毫秒级,用time.time()或datetime.timestamp()获取,datetime.fromtimestamp()转本地时间、utcfromtimestamp()转UTC时间,strptime()解析字符串,zoneinfo模块推荐用于跨时区处理。
Python 中处理时间戳的核心是 datetime 和 time 模块,关键在于分清“时间戳(timestamp)”是秒级还是毫秒级,并明确目标格式(字符串、datetime 对象或其它时区时间)。
系统默认返回的是自 1970-01-01 UTC 起的秒数(float 类型),毫秒级需乘以 1000:
time.time() 或 int(datetime.now().timestamp())
int(time.time() * 1000) 或 int(datetime.now().timestamp() * 1000)
用 datetime.fromtimestamp() 转成本地时区 datetime 对象;用 datetime.utcfromtimestamp() 转成 UTC 时间;再用 .strftime() 格式化为字符串:
datetime.fromtimestamp(1717027200).strftime('%Y-%m-%d %H:%M:%S') → '2025-05-
31 00:00:00'
datetime.utcfromtimestamp(1717027200).strftime('%Y-%m-%d %H:%M:%S') → '2025-05-30 16:00:00'
先用 datetime.strptime() 解析字符串为 datetime 对象,再调用 .timestamp() 方法:
dt = datetime.strptime('2025-05-31 10:30:00', '%Y-%m-%d %H:%M:%S')ts = int(dt.timestamp()) → 得到本地时区对应的秒级时间戳datetime.strptime(...).replace(tzinfo=timezone.utc).timestamp()
Python 3.9+ 推荐使用 zoneinfo 模块避免 pytz 的复杂性:
datetime.fromtimestamp(ts, ZoneInfo("Asia/Shanghai"))
dt = datetime.strptime('2025-05-31 12:00', '%Y-%m-%d %H:%M').replace(tzinfo=ZoneInfo("Asia/Tokyo")) → dt.timestamp()