我正在尝试与一个API交互,该API使用的时间戳开始于与UNIX epoch不同的时间。它似乎是从2000-01-01开始计算的,但我不确定如何进行转换,也不知道这种日期时间格式的名称是什么。
当我在1456979510发送消息时,我收到一个回复,说它是在510294713收到的。
两者之差为946684796秒(有时为946684797),约为30年。
有人能告诉我在两者之间转换的正确方法吗?或者我是否可以用Python直接生成它们?
谢谢
编辑
我应该提到的另一个细节是,这是Zigbee设备的API。我在他们的文档中找到了以下数据类型条目:
1.3.2.7 Absolute time
This is an unsigned 32-bit integer representation for absolute time. Absolute time is measured in seconds from midnight, 1st January 2000.
我仍然不确定在两者之间转换的最简单的方法
好吧,在2000-01-01T00:00:00Z和1970-01-01T00:00:00Z之间有946684800秒。所以,您可以为
946684800
设置一个常量,然后从您的Unix时间戳中加或减。你在数字上看到的变化与发送和接收数据的延迟有关,也可能是由于时钟同步或缺少时钟同步。因为这是整秒,你的数字是3到4秒关闭,那么我猜你的电脑和你的设备之间的时钟也是3到4秒不同步。
时间1970年1月1日00:00:00被认为是UNIX epoch。所以,如果你想从UNIX时间转换成一个时间戳,它的纪元是2000年1月1日(比如说2000纪元),最简单的方法就是从UNIX时间中减去2000年1月1日的UNIX时间。
其中2000年1月1日的UNIX时间是946684800。
编辑:文档确实显示
因此,
946684800
是应该用来计算的精确时差。您计算的几秒差可能是由于网络延迟或其他一些延迟造成的。编辑:OP添加了详细信息,指定时间从午夜开始,因此它是绝对时间,不同于从中午开始的J2000。但既然标题上写着“时间戳从2000年1月1日开始”,我就让这个答案留给未来的答案寻求者。
回答:
您提到的时间戳似乎是提到的J2000.0 here
因为Unix和J2000纪元时间是常量,所以可以定义一个常量来存储差异。
如果你有数学倾向,下面的链接提供一些关于转换的信息
http://onegeek.org/software/smeg/current/src/time.c(C文件)
C文件中的
#define
部分包含以下内容#define J2000 2451545.0 /* you-know-when */
#define U1970 -10957.5 /* unix epoch relative to J2000 */
相关问题 更多 >
编程相关推荐