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))
x
和 y
会根据 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()) 是不是给了我一个时区感知值?的主要内容,如果未能解决你的问题,请参考以下文章