从纪元到日期时间的转换不正确
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 纪元转换为人类可读时的日期不正确