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