Python Datetime:将 strftime() 与可识别时区的日期一起使用

新手上路,请多包涵

假设我有日期 d 像这样:

 >>> d
datetime(2009, 4, 19, 21, 12, tzinfo=tzoffset(None, -7200))

如您所见,它是“时区感知”的,偏移量为 2 小时,utctime 是

>>> 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)

那么,真正的 UTC 日期是 2009 年 3 月 19 日 23:12:00,对吗?

现在我需要用字符串格式化我的日期,我使用

>>> d.strftime('%Y-%m-%d %H:%M:%S.%f')
'2009-04-19 21:12:00.000000'

这似乎没有考虑到这个偏移量。如何解决?

原文由 snoob dogg 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 559
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

原文由 dnswlt 发布,翻译遵循 CC BY-SA 4.0 许可协议

原因是 python 实际上格式化了你的 datetime 对象,而不是一些“此时的 UTC”

要在格式中显示时区,请使用 %z%Z

查找 strf 文档 以获取详细信息

原文由 Slam 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题