gpt4 book ai didi

ruby-on-rails - 将字符串解析为时间与原始时间不同

转载 作者:数据小太阳 更新时间:2023-10-29 09:02:06 24 4
gpt4 key购买 nike

所以我在使用 Time 类的对象属性之一查找记录时遇到了问题.

事实证明,当我以 params 的形式传递时间时到我的 Controller ,它又将它发送到模型......time我发送的对象被字符串化。

所以我想我会通过 Time.parse(<stringified time>) 将它转换回时间或 <stringified time>.to_time -(使用 rails )

但我的测试一直失败,所以我决定调查一下到底发生了什么。

这是我发现的:

2.2.0 :003 > a = Time.now
=> 2015-10-14 20:50:19 +0100
2.2.0 :004 > b = a.to_s
=> "2015-10-14 20:50:19 +0100"
2.2.0 :005 > c = Time.parse b
=> 2015-10-14 20:50:19 +0100
2.2.0 :006 > c == a
=> false
2.2.0 :007 > a.class
=> Time
2.2.0 :008 > c.class
=> Time
2.2.0 :015 > a - c
=> 0.951439
2.2.0 :016 > d = b.to_time
=> 2015-10-14 20:50:19 +0100
2.2.0 :017 > c - d
=> 0.0

我的困惑主要来自以下行:a - c这给了我0.951439 .这种差异从何而来?

最重要的是,我如何使这两者相等?非常感谢大家。

最佳答案

原因:

Since Ruby 1.9.2, Time implementation uses a signed 63 bit integer, Bignum or Rational. The integer is a number of nanoseconds since the Epoch which can represent 1823-11-12 to 2116-02-20. When Bignum or Rational is used (before 1823, after 2116, under nanosecond), Time works slower as when integer is used.

如果你运行 a = Time.now自纪元 plus P 纳秒以来,您得到了 N 秒。但是当你运行 Time.parse b你有相同的秒数,但 纳秒。这就是您要找的。

Loading development environment (Rails 4.2.4)
[1] pry(main)> a = Time.now
=> 2015-10-14 23:41:12 +0300
[2] pry(main)> a.nsec
=> 733355000
[3] pry(main)> Time.parse(a.to_s).nsec
=> 0

所以你必须避免这种纳米 Material 。例如你可以这样写:

[16] pry(main)> a = Time.at(Time.now.to_i)
=> 2015-10-14 23:47:59 +0300
[17] pry(main)> a.nsec
=> 0

关于ruby-on-rails - 将字符串解析为时间与原始时间不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33134872/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com