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