我真的希望你能帮助我。我有一个python程序输出的日期,我需要能够在另一个程序中访问。
问题是我不知道这个日期是如何格式化的:
Format Date
129893779638930000 - 2012-08-13 17:32:43
这是日期和时间,我真的希望有人能够识别它的格式,因为我不太了解python。如果您可以告诉我如何将其转换为unix时间戳,则可以获得奖励积分。
编辑: 执行此操作的程序是Foobar2000(音乐程序的扩展)的组件。此组件显示在此处:http://www.foobar2000.org/components/view/foo_playcount,它是XML导出功能,可生成奇数日期/时间戳。
答案 0 :(得分:9)
129893678626216000
看起来像1到8秒(几十纳秒)的unix时间戳:1,298,936,786.262,160,00
。它代表:
>>> from datetime import datetime
>>> datetime.utcfromtimestamp(129893678626216000/1e8)
datetime.datetime(2011, 2, 28, 23, 46, 26, 262160)
编辑:但是您的信息“文件时间是一个64位值,表示自1601年1月1日凌晨12:00开始经过的100纳秒间隔的数量,1601协调世界时( UTC)“告诉我使用:
>>> from datetime import datetime, timedelta
>>> datetime(1601, 1, 1, 0, 0, 0) + timedelta(seconds = 129893678626216000/1e7)
datetime.datetime(2012, 8, 13, 21, 44, 22, 621599)
你得到了你期待的东西。
您也可以将其直接转换为unix时间戳(自1970-01-01 00:00:00 UTC以来的秒数):
>>> 129893678626216000 / 1e7 - 11644473600
1344894262.6215992
答案 1 :(得分:2)
文件时间是一个64位值,表示数量 自上午12:00起经过的100纳秒间隔1月1日, 1601世界协调时间(UTC)。系统记录文件时间 应用程序创建,访问和写入文件时。 NTFS文件 system以UTC格式存储时间值,因此它们不受影响 时区或夏令时的变化。 FAT文件系统 根据计算机的本地时间存储时间值。对于 例如,在华盛顿太平洋标准时间下午3点保存的文件被视为 纽约美国东部时间下午6点在NTFS卷上,但它被视为美国东部时间下午3点 在纽约的FAT卷上。
重要的是时间可能是UTC和本地时区。如果可能有FAT文件系统;检查插件是否直接从磁盘读取文件时间而不进行任何转换,以确定是否需要考虑当地时区。
对于UTC案例(adapting C++ answer):
WINDOWS_TICK_INTERVAL = 100e-9 # 100 nanoseconds intervals
SEC_TO_UNIX_EPOCH = (datetime(1970, 1, 1) - datetime(1601, 1, 1)).total_seconds()
# -> 11644473600
def WindowsTickToUnixSeconds(windowsTicks):
return windowsTicks * WINDOWS_TICK_INTERVAL - SEC_TO_UNIX_EPOCH
将其转换为datetime
对象:
from datetime import datetime
filetime = 129893779638930000
dt = datetime.utcfromtimestamp(WindowsTickToUnixSeconds(filetime))
print(dt.strftime("%Y-%m-%d %H:%M:%S.%f-00:00"))
# -> 2012-08-14 00:32:43.893000-00:00
它似乎与您问题中的时间相对应:2012-08-13 17:32:43-07:00
(可能是PDT)。
要处理过去本地时区(来自FAT)的文件时间的DST,您可能需要pytz library。
答案 2 :(得分:1)
所有人都对这个世界感到满意,文件时间就像一个unix时间戳,但是从上午12点开始测量。 1601年1月1日,所以减去适当的秒数并除以秒给出一个unix时间戳,试试这个:(FILETIME - 116444736000000000) / 10000000