从2000年1月1日起从UNIX时间到时间戳的转换

2024-05-14 10:17:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试与一个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.

我仍然不确定在两者之间转换的最简单的方法


Tags: 方法文档名称api消息编辑timeis
3条回答

好吧,在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 time> = <UNIX time> - <January 1, 2000 UNIX time>

<UNIX time> = <2000 time> + <January 1, 2000 UNIX time>

其中2000年1月1日的UNIX时间是946684800

编辑:文档确实显示

Absolute time is measured in seconds from midnight, 1st January 2000.

因此,946684800是应该用来计算的精确时差。您计算的几秒差可能是由于网络延迟或其他一些延迟造成的。

编辑:OP添加了详细信息,指定时间从午夜开始,因此它是绝对时间,不同于从中午开始的J2000。但既然标题上写着“时间戳从2000年1月1日开始”,我就让这个答案留给未来的答案寻求者。

回答:

您提到的时间戳似乎是提到的J2000.0 here

因为Unix和J2000纪元时间是常量,所以可以定义一个常量来存储差异。

如果你有数学倾向,下面的链接提供一些关于转换的信息

  1. http://www.giss.nasa.gov/tools/mars24/help/algorithm.html参考步骤A-2
  2. 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 */

相关问题 更多 >

    热门问题