【问题标题】: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 个数字并得到正确的日期。那么是不是有两种时代的“格式”可以这么说?

【问题讨论】:

    标签: ruby unix unix-timestamp epoch


    【解决方案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
    猜你喜欢
    • 2021-12-20
    • 2017-06-22
    • 2020-02-22
    • 1970-01-01
    • 2019-07-20
    • 2019-02-04
    • 1970-01-01
    • 2018-04-24
    • 2011-12-06
    相关资源
    最近更新 更多