使用python转换Mac时间戳

时间:2013-06-03 16:17:41

标签: python macos datetime timestamp

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

HFS Plus时间戳代表自1904年1月1日午夜以来的秒数。

例如,时间戳: 3453120824

人类约会时间:周一,2013年6月3日16:13:44 GMT

有没有python方法可以做到这一点?

3 个答案:

答案 0 :(得分:5)

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

>>> 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'

答案 1 :(得分:0)

您可以通过此方法将其他方式(datetime对象转换为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版本不同,使用的是自1/1/2001而非1904年以来的秒数。

答案 2 :(得分:0)

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

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 epoch和mac时间戳之间的差异,以秒为单位,永远不会改变。当你将这两个加在一起并转换unix时代时,你会得到一个人类可读的日期。

*截至High Sierra,chat.db file now uses nanoseconds.这需要将日期值除以1000000000。