假设我有这样的日期-e
:
d
正如你所看到的,它是"时区感知",有2小时的偏移,utctime是
>>> d
datetime(2009, 4, 19, 21, 12, tzinfo=tzoffset(None, -7200))
所以,实际的UTC日期是2009年3月19日 23 :12:00,对吧?
现在我需要用字符串格式化日期,我使用
>>> d.utctimetuple()
time.struct_time(tm_year=2009, tm_mon=4, tm_mday=19,
tm_hour=23, tm_min=12, tm_sec=0,
tm_wday=6, tm_yday=109, tm_isdst=0)
这似乎没有考虑到这种偏移。如何解决?
答案 0 :(得分:2)
除了@Slam已经回答的内容:
如果要输出没有任何偏移的UTC时间,可以执行
from datetime import timezone, datetime, timedelta
d = datetime(2009, 4, 19, 21, 12, tzinfo=timezone(timedelta(hours=-2))
d.astimezone(timezone.utc).strftime('%Y-%m-%d %H:%M:%S.%f')
请参阅Python文档中的datetime.astimezone。
答案 1 :(得分:1)
答案 2 :(得分:1)
这会将您的本地时间转换为UTC并打印出来:
import datetime, pytz
from dateutil.tz.tz import tzoffset
loc = datetime.datetime(2009, 4, 19, 21, 12, tzinfo=tzoffset(None, -7200))
print(loc.astimezone(pytz.utc).strftime('%Y-%m-%d %H:%M:%S.%f') )
答案 3 :(得分:0)
我无法导入时区模块(也没有太多时间知道原因) 所以我设置了TZ环境变量来覆盖/ etc / localtime信息
>>> import os
>>> import datetime
>>> print datetime.datetime.now().strftime('%Y-%m-%d %H:%M')
2019-05-17 11:26
>>> os.environ["TZ"] = "UTC"
>>> print datetime.datetime.now().strftime('%Y-%m-%d %H:%M')
2019-05-17 09:26