【问题标题】:Convert date to time in some zone on rails 3.2在rails 3.2的某个区域将日期转换为时间
【发布时间】:2012-08-14 11:48:19
【问题描述】:

我有 3 个对象 - @date、@time 和 @datetime。如何使用对象@time 和@datetime 中的区域将对象@date 转换为时间(和日期时间)?

例子:

@date = '2012-1-1'
@time = '2012-08-14 14:48:47 +1000'
@datetime = '2012-08-14 14:48:47 +0500'
@converted_date_to_time = ...     # should give '2012-1-1 00:00:00 +1000'
@converted_date_to_datetime = ... # should give '2012-1-1 00:00:00 +0500'

【问题讨论】:

    标签: ruby-on-rails-3 date datetime time timezone


    【解决方案1】:

    你可以像这样解析日期

    1.9.3p194> date = '2012-1-1'
    => "2012-1-1" 
    1.9.3p194> Time.parse(date)
    => 2012-01-01 00:00:00 +1300 
    

    那是使用我当地的时区(惠灵顿,+13)。你也可以用同样的方式解析你的时间字符串

    1.9.3p194> time = '2012-08-14 14:48:47 +1000'
    => "2012-08-14 14:48:47 +1000" 
    1.9.3p194> Time.parse(time)
    => 2012-08-14 16:48:47 +1200 
    

    您会注意到它看起来有点不对,但那是因为它再次使用我的本地时区,所以它是准确的,但目前在我的时区。然后,您可以将其转换为您想要的任何时区。

    1.9.3p194> Time.parse(time).in_time_zone('Moscow')
    => Tue, 14 Aug 2012 08:48:47 MSK +04:00
    
    1.9.3p194> Time.parse(time).in_time_zone('Brisbane')
    => Tue, 14 Aug 2012 14:48:47 EST +10:00 
    

    这同样适用于您的datetime 字符串。

    如果你想使用特定的时区,你可以这样做

    1.9.3p194> Time.find_zone('Tokyo').parse('2012-08-14 14:48:47 +0500')
    => Tue, 14 Aug 2012 18:48:47 JST +09:00 
    

    【讨论】:

    • 这是正确的,不要使用'2012-1-1'.to_time.in_time_zone('Moscow'),而是Time.parse('2012-1-1').in_time_zone('Moscow' )
    【解决方案2】:

    如果要在config.time_zone指定的区域解析时间,可以使用:

    Time.zone.parse('2012-08-14 14:48:47 +1000')
    

    不过,我不会使用 DateTime,除非您有一些特殊要求,因为 Time 类现在支持大范围的日期,而且 Rails 通过 Time.zone 处理时区非常好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-21
      相关资源
      最近更新 更多