5

我正在尝试使用 python(在 linux 系统上)将 Mac OSX(HFS Plus)时间戳转换为人类可读的格式。

HFS Plus 时间戳表示自 1904 年 1 月 1 日午夜以来的时间(以秒为单位)。

例如时间戳:3453120824

在人类日期时间:星期一,2013 年 6 月 3 日 16:13:44 GMT

有没有蟒蛇的方式来做到这一点?

4

3 回答 3

5

datetimetimedelta一起使用怎么样?您需要特别注意此处的格式化字符列表

>>> import datetime
>>> d = datetime.datetime.strptime("01-01-1904", "%m-%d-%Y")
>>> d
datetime.datetime(1904, 1, 1, 0, 0)
>>> d + datetime.timedelta(seconds=3453120824)
datetime.datetime(2013, 6, 3, 16, 13, 44) 
>>> (d + datetime.timedelta(seconds=3453120824)).strftime("%a, %d %b %Y %H:%M:%S GMT")
'Mon, 03 Jun 2013 16:13:44 GMT'
于 2013-06-03T16:25:15.127 回答
1

你根本不需要日期时间。Apple 从 2001-01-01 开始存储他们的时间。超级烦人但很容易克服。只需将 1970-01-01 和 2001-01-01 之间的差异(以秒为单位)添加到变量中,并使用 time 在一行代码中将其格式化:

import time
mac_date = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(data[0]/1000000000 + 978307200))
print mac_date

在这个例子中,data[0] 是我对 chat.db 进行 sqlite 查询得到的日期,它是元组中的第一个字段。978307200 是以秒为单位的 unix 纪元和 mac 时间戳之间的差异,并且永远不会改变。当您将这两者相加并转换 unix 纪元时,您会得到一个人类可读的日期。

*从 High Sierra 开始,chat.db 文件现在使用纳秒。这要求日期值除以 1000000000。

于 2016-04-28T17:12:41.473 回答
0

您可以通过此方法将其他方式转换(日期时间对象到 MAC 绝对时间):

import datetime
dt = datetime.datetime(2013,6,3,16,13,44)
tmp = datetime.datetime(1904,1,1,0,0)
MacAbsTime = int((dt - tmp).total_seconds())

另请注意,iOS MAC 绝对时间与 OSX 版本不同,使用自 2001 年 1 月 1 日以来的秒数,而不是 1904 年。

于 2014-08-28T10:56:05.710 回答