我要打印时区。我使用了%Z
,但它没有打印:
import datetime
now = datetime.datetime.now()
print now.strftime("%d-%m-%Y")
print now.strftime("%d-%b-%Y")
print now.strftime("%a,%d-%b-%Y %I:%M:%S %Z") # %Z doesn't work
我是否需要导入pytz
发布于 2015-07-08 11:20:34
now()
返回类datetime.datetime
的对象,该对象本质上不包含有关其时区的信息。(即它是“朴素”;参见“朴素”与“知道”日期和时间对象在文件中的描述)
根据文档的说法
datetime.datetime.now(tz=None) 返回当前本地日期和时间。 ..。 如果可选参数
tz
为None
或未指定,则将时间戳转换为平台的本地日期和时间,而返回的datetime对象是朴素的。
要获得平台的本地时区,您应该按照您的建议使用pytz
。这是的代码
>>> import datetime
>>> now = datetime.datetime.now()
>>>
>>> from pytz import reference
>>> localtime = reference.LocalTimezone()
>>> localtime.tzname(now)
'Mountain Daylight Time'
您还可以通过以下方法获得实际的UTC偏移量,以小时为单位:
>>> import time
>>> print(-time.timezone / 3600) # convert from seconds to hours
-7.0
所以你可以用:
>>> print(now.strftime("%a, %d-%b-%Y %I:%M:%S, " + localtime.tzname(now)))
Wed, 08-Jul-2015 01:27:49, Mountain Daylight Time
发布于 2020-02-06 01:06:28
对我来说最简单的是:
$ python3
>>> import datetime
>>> datetime.datetime.now().astimezone().strftime("%Y-%m-%dT%H:%M:%S %z")
>>> datetime.datetime.now().astimezone().strftime("%Y-%m-%dT%H:%M:%S %Z")
>>> exit()
发布于 2015-07-08 13:37:33
这是一种记录在案的行为:datetime.now()
返回一个天真的datetime对象和在这种情况下返回空字符串。。相反,您需要一个可感知的datetime对象。
要打印本地时区缩写,可以使用模块作为pytz
tzinfo对象返回本地时区,该对象可能包含历史时区信息,例如来自tz数据库的信息。
#!/usr/bin/env python
from datetime import datetime
import tzlocal # $ pip install tzlocal
now = datetime.now(tzlocal.get_localzone())
print(now.strftime('%Z'))
# -> MSK
print(now.tzname())
# -> MSK
此代码适用于具有/不带夏时制的时区。它在DST转换过程中和周围工作。如果本地时区在过去有不同的utc偏移量,即使python使用的C库无法访问给定平台上的历史时区数据库,它也能工作。
在Python 3.3+中,当平台支持它时,可以使用属性来获得tzname:
>>> import time
>>> time.localtime().tm_zone
'MSK'
或者使用datetime
模块:
>>> from datetime import datetime, timezone
>>> datetime.now(timezone.utc).astimezone().tzname()
'MSK'
代码是可移植的,但在某些平台(没有.tm_zone
(本例中datetime
必须使用time.tzname
)和使用“有趣”时区)上,结果可能是不正确的。
在较早的Python版本中,在具有“无趣”时区的系统上,可以使用time.tzname
。
>>> import time
>>> is_dst = time.daylight and time.localtime().tm_isdst > 0
>>> time.tzname[is_dst]
'MSK'
一个“有趣”时区的例子是2010-2015年期间的欧洲/莫斯科时区。
在用Python获取计算机的UTC偏移量中也讨论了类似的问题。
https://stackoverflow.com/questions/31299580
复制相似问题