首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Python:从strftime打印时区

Python:从strftime打印时区
EN

Stack Overflow用户
提问于 2015-07-08 09:27:00
回答 4查看 39.4K关注 0票数 25

我要打印时区。我使用了%Z,但它没有打印:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-07-08 11:20:34

now()返回类datetime.datetime的对象,该对象本质上不包含有关其时区的信息。(即它是“朴素”;参见“朴素”与“知道”日期和时间对象在文件中的描述)

根据文档的说法

datetime.datetime.now(tz=None) 返回当前本地日期和时间。 ..。 如果可选参数tzNone或未指定,则将时间戳转换为平台的本地日期和时间,而返回的datetime对象是朴素的。

要获得平台的本地时区,您应该按照您的建议使用pytz这是的代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> import datetime
>>> now = datetime.datetime.now()
>>>
>>> from pytz import reference
>>> localtime = reference.LocalTimezone()
>>> localtime.tzname(now)
'Mountain Daylight Time'

您还可以通过以下方法获得实际的UTC偏移量,以小时为单位:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> import time
>>> print(-time.timezone / 3600) # convert from seconds to hours
-7.0

所以你可以用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> print(now.strftime("%a, %d-%b-%Y %I:%M:%S, " + localtime.tzname(now)))
Wed, 08-Jul-2015 01:27:49, Mountain Daylight Time
票数 9
EN

Stack Overflow用户

发布于 2020-02-06 01:06:28

对我来说最简单的是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ 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()
票数 42
EN

Stack Overflow用户

发布于 2015-07-08 13:37:33

这是一种记录在案的行为:datetime.now()返回一个天真的datetime对象和在这种情况下返回空字符串。。相反,您需要一个可感知的datetime对象。

要打印本地时区缩写,可以使用模块作为pytz tzinfo对象返回本地时区,该对象可能包含历史时区信息,例如来自tz数据库的信息。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/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:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> import time
>>> time.localtime().tm_zone
'MSK'

或者使用datetime模块:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> from datetime import datetime, timezone
>>> datetime.now(timezone.utc).astimezone().tzname()
'MSK'

代码是可移植的,但在某些平台(没有.tm_zone (本例中datetime必须使用time.tzname )和使用“有趣”时区)上,结果可能是不正确的。

在较早的Python版本中,在具有“无趣”时区的系统上,可以使用time.tzname

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> import time
>>> is_dst = time.daylight and time.localtime().tm_isdst > 0
>>> time.tzname[is_dst]
'MSK'

一个“有趣”时区的例子是2010-2015年期间的欧洲/莫斯科时区。

用Python获取计算机的UTC偏移量中也讨论了类似的问题。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31299580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文