首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从2000年1月1日开始从UNIX时间转换为时间戳

从2000年1月1日开始从UNIX时间转换为时间戳
EN

Stack Overflow用户
提问于 2016-03-03 04:42:33
回答 5查看 15.2K关注 0票数 9

我正在尝试与使用时间戳的API进行交互,时间戳的启动时间与UNIX时代不同。它似乎开始计算2000-01-01,但我不确定如何进行转换,也不知道这个日期时间格式的名称是什么。

当我在1456979510发送一条信息时,我收到回复说它是在510294713接收到的。

两者之间的差异是946684796秒(有时是946684797),大约是30年。

有人能让我知道在两者之间转换的正确方法吗?还是我是否可以在Python中直接生成它们?

谢谢

编辑

我应该提到的另一个细节是,这是Zigbee设备的API。我在他们的文档中找到了以下数据类型条目:

1.3.2.7绝对时间 这是一个无符号的32位整数表示的绝对时间.绝对时间以秒为单位,从2000年1月1日午夜开始。

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

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2016-03-03 05:10:30

时间1 1970年1月1日00:00:00被视为UNIX时代。因此,如果要将UNIX时间转换为具有2000年1月1日(假设是2000年纪元)的时间戳,最简单的方法是从UNIX时间减去2000年1月1日的UNIX时间。

代码语言:javascript
运行
复制
<2000 time> = <UNIX time> - <January 1, 2000 UNIX time>

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

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

编辑:文档确实说

绝对时间以秒为单位,从2000年1月1日午夜开始。

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

票数 13
EN

Stack Overflow用户

发布于 2016-03-03 04:59:14

编辑:OP添加了详细信息,指定时间从午夜开始,因此它与中午开始的J2000完全不同。但由于标题是“时间戳从2000年1月1日开始”,我让这个答案是为未来的答案寻求者。

答案:

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

因为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 */
票数 4
EN

Stack Overflow用户

发布于 2016-03-03 05:10:02

在2000-01-01T00:00:00Z和1970-01-01T00:00:00Z之间有946684800秒。因此,您可以为946684800设置一个常量,并从Unix时间戳中添加或减去。

您在数字中看到的变化与发送和接收数据的延迟有关,也可能是由于时钟同步或缺少时钟同步所致。因为这些是整秒,你的数字是3到4秒,那么我猜你的电脑和你的设备之间的时钟也是3到4秒不同步的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35763357

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档