【问题标题】:Weird Ruby Behavior in DateTime to Time conversionDateTime 到时间转换中的奇怪 Ruby 行为
【发布时间】:2012-07-01 21:50:23
【问题描述】:

我的目标是从 DateTime 实例中获取 Time 实例

这里之前已经讨论过,我仍然很困惑:Convert to/from DateTime and Time in Ruby

对于我在运行 ruby​​ 1.9.3p0(2011-10-30 修订版 33570)[x86_64-darwin11.2.0] 的 irb 中,一切正常

1.9.3p0 :001 > require 'Date'
 => true 
1.9.3p0 :002 > require 'Time'
 => true 
1.9.3p0 :003 > t=DateTime.now
 => #<DateTime: 2012-07-01T01:57:32+05:30 ((2456109j,73652s,621060000n),+19800s,2299161j)> 
1.9.3p0 :004 > t2=t.to_time
 => 2012-07-01 01:57:32 +0530 
1.9.3p0 :005 > t.class
 => DateTime 
1.9.3p0 :006 > t2.class
 => Time 
1.9.3p0 :007 > 

但是,在同一 ruby​​ 平台上使用 rails console v 3.2.3 时

1.9.3p0 :001 > t=DateTime.now
 => Sun, 01 Jul 2012 02:00:00 +0530 
1.9.3p0 :002 > t.class
 => DateTime 
1.9.3p0 :003 > t2=t.to_time
 => Sun, 01 Jul 2012 02:00:00 +0530
1.9.3p0  > t2.class
 => DateTime

如何从 Rails 中的 DateTime 获取 Time 实例?

【问题讨论】:

    标签: ruby-on-rails ruby datetime time


    【解决方案1】:

    根据Rails documentation for DateTime.to_time()

    如果 self 的偏移量不是 0,则 self 将原样返回

    要更改为 0 偏移量,请使用 DateTime.utc()

    1.9.3p194 :005 > t3=t2.utc
     => Sat, 30 Jun 2012 20:43:21 +0000 
    1.9.3p194 :006 > t3.offset
     => (0/1) 
    1.9.3p194 :007 > t4=t3.to_time
     => 2012-06-30 20:43:21 UTC 
    1.9.3p194 :008 > t4.class
     => Time 
    

    【讨论】:

    • 感谢您的回答。我真的在这个问题上摸不着头脑并寻找针对 Ruby 1.9 的错误报告,结果证明 Rails 库破坏底层 Ruby 接口是一个可怕的决定......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-19
    • 2012-05-25
    • 2012-03-20
    • 2020-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多