如何获得Python中包含时区的文件的ctime和/或mtime?

2024-06-11 07:03:21 发布

您现在位置:Python中文网/ 问答频道 /正文

根据我问的这个相关的questionanswer,很明显python3.4中的datetime.fromtimestamp(os.path.getctime())没有返回一个支持时区的datetime对象,但是,根据一些调查,我还发现HFS+文件系统上的OS X 10.9(例如)似乎是维护时区和ctime(除非gls在推断)我的本地时区和夏令时的时区):

$ gls -l --full-time -c

-rw-------  1 myuser staff 538 2015-01-04 17:12:57.000000000 +0100 fileone
-rwxr-xr-x 17 myuser staff 578 2015-05-20 06:41:07.000000000 +0200 filetwo

(我正在使用the GNU version of ls

如何从ctime获取时区并将其插入/合并到datetime对象中?在

(我也希望得到同样的答案,我想应该是类似的)。在


Tags: path对象answerdatetimeosfullquestionstaff
3条回答

如果只想依赖Python标准库,则只能使用tzinfo的时区子类:

tz = datetime.timezone(datetime.timedelta(seconds=-time.timezone), time.tzname[0]) \
    if (time.daylight == 0 || time.localtime(os.path.getctime(path)).tm_isdst == 0) \
    else datetime.timezone(datetime.timedelta(seconds=-time.altzone), time.tzname[1])
dt = datetime.fromtimestamp(os.path.getctime(path), tz)

那么你可以(在法国):

^{pr2}$

当然,mtime的工作原理是一样的

你应该向J.F. Sebastian's post咨询参考资料。以下是摘录:

以解决方法获取当前UTC偏移量时间。白天问题,即使tm gmtoff不可用,[此]可用于:

^{3}$

这对我有用:

import os, datetime, time

modified_time = os.path.getmtime(file)
mtime_obj = datetime.datetime(*time.localtime(modified_time)[:6])
# (or)
mtime_obj = datetime.datetime.fromtimestamp(modified_time)
print(mtime_obj.strftime('%Y-%m-%d_%H-%M-%S'))

没有外部软件包。只是标准的python库。(Python 3.6)

ctime和mtime都以“自epoch以来的秒数”的形式提供(值由time.time()返回)。在

要获取本地时区,可以使用^{} module

#!/usr/bin/env python
import os
from datetime import datetime
from tzlocal import get_localzone # $ pip install tzlocal

local_timezone = get_localzone()
aware_dt = datetime.fromtimestamp(os.path.getctime(path), local_timezone)

您可能会看到时区信息,因为ls使用本地时区将时间戳转换为具有时区偏移量的相应故障时间。在

相关问题 更多 >