在Python中转换Cocoa时间戳

在Python中转换Cocoa时间戳,python,cocoa,timestamp,Python,Cocoa,Timestamp,我有一个Cocoa时间戳(2001年1月1日00:00:00 UTC的零时间),需要用Python进行转换。当我使用下面的代码时,它假定一个Unix时间戳输入。除了以秒为单位增加31年(略低于10亿秒…)外,转换时间的最佳方式是什么 import datetime print(datetime.datetime.fromtimestamp(int("495759456")).strftime('%Y-%m-%d %H:%M:%S')) 这一行代码的输出是“1985-09-16 16:12:03

我有一个Cocoa时间戳(2001年1月1日00:00:00 UTC的零时间),需要用Python进行转换。当我使用下面的代码时,它假定一个Unix时间戳输入。除了以秒为单位增加31年(略低于10亿秒…)外,转换时间的最佳方式是什么

import datetime
print(datetime.datetime.fromtimestamp(int("495759456")).strftime('%Y-%m-%d %H:%M:%S'))

这一行代码的输出是“1985-09-16 16:12:03”

您是否需要这项工作:

from datetime import datetime

unix = datetime(1970, 1, 1)  # UTC
cocoa = datetime(2001, 1, 1)  # UTC

delta = cocoa - unix  # timedelta instance

timestamp = datetime.fromtimestamp(int("495759456")) + delta

print(timestamp.strftime('%Y-%m-%d %H:%M:%S'))
我没有为两个开始的时间指定时区信息,因为它们在同一个区域,所以我假设在计算差异时使用哪一个并不重要。对于转换时间戳字符串,如果时区与生成字符串的时区不同,则可能需要根据时区进行调整


上面的代码生成了
2016-09-16 15:57:36

使用上述解决方案进行转换时,需要注意的一件事是确保Cocoa时间戳的单位与您希望在unix时间戳中使用的单位相同。我注意到,在许多情况下,可可时间戳是以纳秒为单位存储的

除非您希望Unix时间戳也表示为纳秒,否则请确保在转换之前将cocoa时间戳除以适当的数字。e、 g.除以100000000将纳秒转换为秒等