Python 中的 datetime.fromtimestamp(os.path.getctime()) 是不是给了我一个时区感知值?

Posted

技术标签:

【中文标题】Python 中的 datetime.fromtimestamp(os.path.getctime()) 是不是给了我一个时区感知值?【英文标题】:Does datetime.fromtimestamp(os.path.getctime()) in Python give me a timezone-aware value?Python 中的 datetime.fromtimestamp(os.path.getctime()) 是否给了我一个时区感知值? 【发布时间】:2015-08-23 13:04:11 【问题描述】:

我在 Python 3.4 中使用这样的调用:

x = datetime.fromtimestamp(os.path.getctime(somefilename))
y = datetime.fromtimestamp(os.path.getmtime(somefilename))

xy 会根据 the definition of that term in the datetime documentation 识别时区吗?这是否因平台而异?我假设理论上文件的 ctime 和 mtime 是根据 UTC 纪元以来的秒数来衡量的,所以答案应该是肯定的?

如果是这样,在所有/大多数 POSIX 平台上都是这样吗?具体来说,在现代 Linux/OS X 上是这样吗?

如果没有,有没有更好的方法来处理这个问题?如何获取时区感知的 ctime 和 mtime 数据?平台使用什么时区来表达/存储 ctime 和 mtime?

【问题讨论】:

【参考方案1】:

至少在 OSX 上,os.path.getctime 在系统时区返回 TZ-naive 日期时间。

$ date
Mon Jun  8 15:08:40 PDT 2015

$ touch new_file
$ python  
>>> from datetime import datetime
>>> import os
>>> datetime.fromtimestamp(os.path.getctime('new_file'))
datetime.datetime(2015, 6, 8, 15, 8, 42)
>>> print datetime.fromtimestamp(os.path.getctime('new_file')).tzinfo
None

time.timezone 将以秒为单位为您提供本地时区偏移量,不考虑 DST。 pytz 库可能对您非常有用。

【讨论】:

检查文件的tzinfo 属性不是很有用,因为fromtimestamp 函数允许您将时区作为tzinfo 实例传递。没有它,它只使用本地时区。我猜整个datetime 模块None 必须代表“只使用本地时区”。【参考方案2】:

os.path.getctime() 返回一个浮点数,表示“自纪元以来的秒数”(time.time() 返回的值)——它不是一个天真的日期时间对象。

datetime.fromtimestamp() 返回一个表示本地时间的原始日期时间对象除非您将显式 tzinfo 对象作为第二个参数传递,code example。

【讨论】:

以上是关于Python 中的 datetime.fromtimestamp(os.path.getctime()) 是不是给了我一个时区感知值?的主要内容,如果未能解决你的问题,请参考以下文章

python [解析python中的nginx访问日志]解析python #log中的nginx访问日志

python中的self

Python学习篇 Python中的变量和数据类型

如何python3中调用python2中的方法

Python学习篇 Python中的集合

python 迭代python中的一小部分中的数字