如何在Python中将UTC时间转换为太平洋时区时间?代码报错求助
Python UTC时间戳转太平洋时区的错误修复方案
嘿,我立马就发现问题所在啦!你定义的now_utc是一个毫秒级的时间戳(long整数),可不是datetime对象,所以它根本没有astimezone这个方法,这就是报错的原因~
先看看你原来的代码和报错信息:
错误代码
from datetime import datetime from pytz import timezone fmt = "%Y-%m-%d %H:%M:%S %Z%z" # 当前UTC时间 now_utc = 1348283733848 # 转换为US/Pacific时区 now_pacific = now_utc.astimezone(timezone('US/Pacific')) print now_pacific.strftime(fmt)
报错信息
Traceback (most recent call last):
File "", line 2, in
AttributeError: 'long' object has no attribute 'astimezone'
修复步骤&代码
要解决这个问题,我们需要先把时间戳转换成带UTC时区的datetime对象,再进行时区转换:
- 你的时间戳是毫秒级的,所以要先除以1000转换成秒级(
datetime.fromtimestamp默认处理秒级时间戳) - 生成
datetime对象时指定tz=pytz.utc,确保这是UTC时间,避免默认使用本地时区导致错误 - 再调用
astimezone转换到太平洋时区
修正后的代码如下:
from datetime import datetime import pytz # 单独导入pytz,方便指定UTC时区 from pytz import timezone fmt = "%Y-%m-%d %H:%M:%S %Z%z" # UTC毫秒时间戳 now_utc_ts = 1348283733848 # 转换为带UTC时区的datetime对象 now_utc = datetime.fromtimestamp(now_utc_ts / 1000, tz=pytz.utc) # 转成US/Pacific时区 now_pacific = now_utc.astimezone(timezone('US/Pacific')) print(now_pacific.strftime(fmt))
如果你的Python版本是3.9及以上,还可以用标准库的zoneinfo代替pytz,写法会更简洁:
from datetime import datetime from zoneinfo import ZoneInfo fmt = "%Y-%m-%d %H:%M:%S %Z%z" now_utc_ts = 1348283733848 now_utc = datetime.fromtimestamp(now_utc_ts / 1000, tz=ZoneInfo("UTC")) now_pacific = now_utc.astimezone(ZoneInfo("America/Los_Angeles")) print(now_pacific.strftime(fmt))
内容的提问来源于stack exchange,提问作者Rakesh moorthy
相关产品推荐
相关产品推荐

