从纪元到日期时间的转换不正确

Posted

技术标签:

【中文标题】从纪元到日期时间的转换不正确【英文标题】:Conversion from epoch to datetime is incorrect 【发布时间】:2019-07-02 16:33:19 【问题描述】:

我一直在使用this answer 将纪元时间转换为日期时间。我有这个纪元:

epoch = 1549626705942

然后做:

Time.at(epoch).to_datetime

但是,我得到了这个结果:

#<DateTime: 51075-09-19T08:45:42+02:00 ((20376082j,24342s,0n),+7200s,2299161j)>

我使用的是 Ruby 版本 2.5.3p105,我的时钟设置为当前年份。这个纪元值计算为今天的日期(2019 年 2 月 2 日),但我得到的是 51075 年。真的不知道发生了什么。

这也很奇怪,因为当我在 this one 这样的网站上输入我的时间戳时,我得到的是今天的日期,但 here 我得到的结果与我的 Ruby 代码相同。

编辑:我试图删除该日期的最后 3 个数字并得到正确的日期。那么是不是有两种时代的“格式”可以这么说?

【问题讨论】:

【参考方案1】:

您将毫秒传递给Time::at() 方法。你应该在那里度过几秒钟。文档链接是here。

要检索 Epoch 值(以秒为单位),请使用 Time#to_i

UPD

这对你有用:

Time.at(0, your_epoch_milliseconds, :millisecond)

【讨论】:

有没有办法也通过毫秒并获得正确的日期时间? 你如何检索毫秒? 我以毫秒为单位从 API 中检索了 epoch API。所以我可以修剪这个整数(修剪最后 3 个数字总是有效吗?)或者配置 Ruby,以便它正确地将该数字转换为当前格式的 DateTime。我对检索但转换已经给我的纪元值不感兴趣。 谢谢,你能参考你获得/想出这个解决方案的资源吗?我正在查看“.at”rdoc,但找不到对此的任何引用。 我在答案中给了你参考。这是复制粘贴ruby-doc.org/core-2.5.3/Time.html#method-c-at

以上是关于从纪元到日期时间的转换不正确的主要内容,如果未能解决你的问题,请参考以下文章

使用 Java 将 unix 纪元转换为人类可读时的日期不正确

将 UTC 纪元转换为本地日期

从纪元到相对日期的秒数

从字符串转换为日期时间时获取常规日期时间格式而不是纪元时间?

从日期转换为纪元-Oracle

比较特定时间间隔的不同格式的纪元日期