我想打印时区。我使用%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
?
答案 0 :(得分:11)
对我来说最简单:
$ 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()
答案 1 :(得分:6)
now()
返回类datetime.datetime
的对象,该对象本身并不包含有关其时区的信息。 (即它是“天真的”;参见“天真”与“知晓”日期和时间对象的描述in the documentation)
datetime.datetime。的现在强>( TZ =无)
返回当前的本地日期和时间。
...
如果可选参数
tz
为None
或未指定,则时间戳将转换为平台的本地日期和时间,并且返回的datetime对象是天真的。
要获得平台的本地时区,您应该按照建议使用pytz
。 Here's Alex Martelli's code to do this:
>>> 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
答案 2 :(得分:5)
这是一种记录在案的行为:datetime.now()
返回一个天真的日期时间对象和%Z
returns an empty string in such cases。您需要一个有意识的日期时间对象。
要打印本地时区缩写,您可以使用tzlocal
module作为pytz
tzinfo对象返回本地时区,该对象可能包含来自the tz database的历史时区信息:< / p>
#!/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+中,当平台支持它时,您可以使用.tm_zone
attribute来获取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
)和"interesting" timezones)。
在较旧的Python版本上,在具有“无趣”时区的系统上,您可以使用time.tzname
:
>>> import time
>>> is_dst = time.daylight and time.localtime().tm_isdst > 0
>>> time.tzname[is_dst]
'MSK'
“有趣”时区的一个例子是2010-2015期间的欧洲/莫斯科时区。
Getting computer's UTC offset in Python中讨论了类似的问题。
答案 3 :(得分:0)
pytz不应使用。从帮助中:
NAME
pytz.referenceDESCRIPTION
请参考Python文档中的tzinfo实现。
用于测试,因为它们仅适用于多年
1987年至2006年。请勿将其用于真实代码。