我想打印时区.我用%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
Run Code Online (Sandbox Code Playgroud)
我可能需要导入pytz吗?
dav*_*gut 22
对我来说最简单的:
$ 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()
Run Code Online (Sandbox Code Playgroud)
这是有记录的行为:在这种情况下,datetime.now()返回一个朴素的datetime对象,并%Z返回一个空字符串。您需要一个已知的datetime对象。
要打印本地时区缩写,可以使用tzlocal模块,该模块可以将本地时区作为pytztzinfo对象返回,该对象可能包含历史时区信息,例如,来自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
Run Code Online (Sandbox Code Playgroud)
此代码适用于具有/不具有夏令时的时区。它可以在DST过渡期间和过渡期间工作。即使本地时区在过去具有不同的utc偏移量也可以使用,即使python使用的C库无法访问给定平台上的历史时区数据库。
在Python 3.3+中,如果平台支持,则可以使用.tm_zoneattribute来获取tzname:
>>> import time
>>> time.localtime().tm_zone
'MSK'
Run Code Online (Sandbox Code Playgroud)
或使用datetime模块:
>>> from datetime import datetime, timezone
>>> datetime.now(timezone.utc).astimezone().tzname()
'MSK'
Run Code Online (Sandbox Code Playgroud)
该代码是可移植的,但是结果在某些平台上可能不正确(没有.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'
Run Code Online (Sandbox Code Playgroud)
“有趣”时区的一个示例是2010-2015年期间的欧洲/莫斯科时区。
在Python中获取计算机的UTC偏移量中讨论了类似的问题。
now()返回类的对象datetime.datetime,该对象本身并不包含有关其时区的信息.(即它是"天真的";参见文档中"天真"与"知晓"日期和时间对象的描述)
根据文件,
datetime.datetime.现在(tz =无)
返回当前的本地日期和时间.
...
如果可选参数
tz是None或者未指定,时间戳转换为平台的本地日期和时间,返回的DateTime对象是幼稚的.
要获得平台的本地时区,您应该按照您的建议使用pytz. 这是Alex Martelli的代码:
>>> import datetime
>>> now = datetime.datetime.now()
>>>
>>> from pytz import reference
>>> localtime = reference.LocalTimezone()
>>> localtime.tzname(now)
'Mountain Daylight Time'
Run Code Online (Sandbox Code Playgroud)
您还可以通过以下方式获得实际的UTC偏移量,以小时为单位:
>>> import time
>>> print(-time.timezone / 3600) # convert from seconds to hours
-7.0
Run Code Online (Sandbox Code Playgroud)
所以你可以使用:
>>> print(now.strftime("%a, %d-%b-%Y %I:%M:%S, " + localtime.tzname(now)))
Wed, 08-Jul-2015 01:27:49, Mountain Daylight Time
Run Code Online (Sandbox Code Playgroud)