无法将寡妇纪元时间转换为正常日期时间
Unable to convert widows epoch time to normal date time
我正在尝试解析我的 Google Chrome 书签文件。
该文件中的条目有一个名为 date_added
的字段,其值类似于 13195047309383442
我无法将这个时间转换为标准日期时间。
我试过以下方法:
import datetime
datetime.fromtimestamp(13195047309383442).strftime('%Y-%m-%d %H:%M:%S')
不幸的是,这会导致错误:OSError: [Errno 22] Invalid argument
我最初的反应是将时间除以 1000000,因为我发现 Windows 以微秒为单位存储纪元时间。结果如下:
datetime.fromtimestamp(13195047309383442/1000000).strftime('%Y-%m-%d %H:%M:%S')
'2388-02-19 21:55:09'
从上面可以看出,年份字段不正确。
我哪里出错了,我该如何解决?
您使用了错误的时间来源。对于 Unix,它是 1970/1/1,对于 Windows,它是 1601/1/1 或其他。你可以试试他的代码:
>>> microseconds = 13195047309383442
>>> seconds, microseconds = divmod(microseconds, 1000000)
>>> days, seconds = divmod(seconds, 86400)
>>> datetime.datetime(1601, 1, 1) + datetime.timedelta(days, seconds, microseconds)
datetime.datetime(2019, 2, 19, 10, 55, 9, 383442)
要将 windows 时间戳转换为 Python datetime
,您需要使用 Window 纪元:
代码:
import datetime as dt
windows_epoch = dt.datetime(year=1601, month=1, day=1)
def datetime_from_window_ts(timestamp):
return windows_epoch + dt.timedelta(seconds=timestamp/1e6)
测试代码:
print(datetime_from_window_ts(13195047309383442))
结果:
2019-02-19 10:55:09.383442
您提到您正在尝试解析 Chrome 书签文件,但根据我的阅读,Chrome 书签时间戳不使用 Unix 1970 日期。它使用 1601-01-1 日期(这就是为什么您的日期超过您可能期望的 2019 年 2 月 19 日的日期)。
查看此资源:
http://fileformats.archiveteam.org/wiki/Chrome_bookmarks
这个转换器工具实际上有一个 Python 片段说明如何完成转换。
https://www.epochconverter.com/webkit
我正在尝试解析我的 Google Chrome 书签文件。
该文件中的条目有一个名为 date_added
的字段,其值类似于 13195047309383442
我无法将这个时间转换为标准日期时间。
我试过以下方法:
import datetime
datetime.fromtimestamp(13195047309383442).strftime('%Y-%m-%d %H:%M:%S')
不幸的是,这会导致错误:OSError: [Errno 22] Invalid argument
我最初的反应是将时间除以 1000000,因为我发现 Windows 以微秒为单位存储纪元时间。结果如下:
datetime.fromtimestamp(13195047309383442/1000000).strftime('%Y-%m-%d %H:%M:%S')
'2388-02-19 21:55:09'
从上面可以看出,年份字段不正确。
我哪里出错了,我该如何解决?
您使用了错误的时间来源。对于 Unix,它是 1970/1/1,对于 Windows,它是 1601/1/1 或其他。你可以试试他的代码:
>>> microseconds = 13195047309383442
>>> seconds, microseconds = divmod(microseconds, 1000000)
>>> days, seconds = divmod(seconds, 86400)
>>> datetime.datetime(1601, 1, 1) + datetime.timedelta(days, seconds, microseconds)
datetime.datetime(2019, 2, 19, 10, 55, 9, 383442)
要将 windows 时间戳转换为 Python datetime
,您需要使用 Window 纪元:
代码:
import datetime as dt
windows_epoch = dt.datetime(year=1601, month=1, day=1)
def datetime_from_window_ts(timestamp):
return windows_epoch + dt.timedelta(seconds=timestamp/1e6)
测试代码:
print(datetime_from_window_ts(13195047309383442))
结果:
2019-02-19 10:55:09.383442
您提到您正在尝试解析 Chrome 书签文件,但根据我的阅读,Chrome 书签时间戳不使用 Unix 1970 日期。它使用 1601-01-1 日期(这就是为什么您的日期超过您可能期望的 2019 年 2 月 19 日的日期)。
查看此资源: http://fileformats.archiveteam.org/wiki/Chrome_bookmarks
这个转换器工具实际上有一个 Python 片段说明如何完成转换。 https://www.epochconverter.com/webkit