0

我有以下代码行

datetime.datetime.strftime(expire_date, "%m/%d/%Y %H:%M %p %Z")

但它没有输出带有时区的日期。

我怎样才能改变它呢?

4

1 回答 1

2

正如文档所说:

对于一个天真的对象,%z 和 %Z 格式代码被空字符串替换。

对于有意识的对象:……如果tzname()返回None%Z则替换为空字符串。否则%Z被返回的值替换,它必须是一个字符串。

(模块介绍中描述了“naive”和“aware”之间的区别。)

所以,要么你有一个天真的对象(一个根本没有时区的对象),要么有一个不知道如何命名其时区的感知对象,或者一个认为它知道如何命名其时区的感知对象,但是返回一个空字符串。

尝试记录expire_date.tzname(),,expire_date.tzinfo然后expire_date.tzinfo.utcoffset(expire_date)看看你得到了什么。(文档的可用类型部分告诉您如何解释这一点。)

那么,你如何解决它?嗯,这取决于你到底在处理什么,但最有可能的是你需要打电话astimezonereplace给它灌输一个时区。

或者,更简单地说,只需分别传递 UTC 日期和时区(或在适当的情况下将它们组合在一起tuple),并编写一个包装器,通过连接日期时间字符串和时区字符串将它们格式化为字符串。

于 2013-04-03T18:25:48.953 回答