我有以下代码行
datetime.datetime.strftime(expire_date, "%m/%d/%Y %H:%M %p %Z")
但它没有输出带有时区的日期。
我怎样才能改变它呢?
正如文档所说:
对于一个天真的对象,%z 和 %Z 格式代码被空字符串替换。
对于有意识的对象:……如果
tzname()
返回None
,%Z
则替换为空字符串。否则%Z
被返回的值替换,它必须是一个字符串。
(模块介绍中描述了“naive”和“aware”之间的区别。)
所以,要么你有一个天真的对象(一个根本没有时区的对象),要么有一个不知道如何命名其时区的感知对象,或者一个认为它知道如何命名其时区的感知对象,但是返回一个空字符串。
尝试记录expire_date.tzname()
,,expire_date.tzinfo
然后expire_date.tzinfo.utcoffset(expire_date)
看看你得到了什么。(文档的可用类型部分告诉您如何解释这一点。)
那么,你如何解决它?嗯,这取决于你到底在处理什么,但最有可能的是你需要打电话astimezone
或replace
给它灌输一个时区。
或者,更简单地说,只需分别传递 UTC 日期和时区(或在适当的情况下将它们组合在一起tuple
),并编写一个包装器,通过连接日期时间字符串和时区字符串将它们格式化为字符串。