Python日期格式?

时间:2012-08-14 06:58:15

标签: python date

我真的希望你能帮助我。我有一个python程序输出的日期,我需要能够在另一个程序中访问。

问题是我不知道这个日期是如何格式化的:

Format               Date
129893779638930000 - 2012-08-13 17:32:43

这是日期和时间,我真的希望有人能够识别它的格式,因为我不太了解python。如果您可以告诉我如何将其转换为unix时间戳,则可以获得奖励积分。

编辑: 执行此操作的程序是Foobar2000(音乐程序的扩展)的组件。此组件显示在此处:http://www.foobar2000.org/components/view/foo_playcount,它是XML导出功能,可生成奇数日期/时间戳。

3 个答案:

答案 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)

好像是Windows file time

  

文件时间是一个64位值,表示数量   自上午12:00起经过的100纳秒间隔1月1日,   1601世界协调时间(UTC)。系统记录文件时间   应用程序创建,访问和写入文件时。 NTFS文件   system以UTC格式存储时间值,因此它们不受影响   时区或夏令时的变化。 FAT文件系统   根据计算机的本地时间存储时间值。对于   例如,在华盛顿太平洋标准时间下午3点保存的文件被视为   纽约美国东部时间下午6点在NTFS卷上,但它被视为美国东部时间下午3点   在纽约的FAT卷上。

另见FILETIME Structure

重要的是时间可能是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

相关问题