【问题标题】:Rails Time Zone: How to pass time zone configured in application.rb file as parameter to the to_datetime method?Rails 时区:如何将 application.rb 文件中配置的时区作为参数传递给 to_datetime 方法?
【发布时间】:2015-08-22 06:33:16
【问题描述】:

我通过将这一行 config.time_zone = 'Mumbai' 添加到我的 application.rb 文件中,在我的 Rails 应用程序中将我的时区配置为印度时区。

我的表中有一个日期时间字段t.datetime :check_in。对于这个check_in 专栏,我正在像Person.check_in = DateTime.now 一样节省服务器时间。当我这样保存时,时间会正确保存,并在应用程序中配置时区。之后由于某种原因,当我像这样更新Person.check_in = "24/08/2015 11:50 AM".to_datetime 时,我配置的时区并没有节省时间。下面是我的 rails 控制台输出:

prashant@prashant-pc:~/client_proj/template$ rails c
Loading development environment (Rails 4.1.5)
2.2.2 :001 > check_in =  DateTime.now
 => Mon, 24 Aug 2015 11:41:16 +0530 
2.2.2 :003 > "24/08/2015 11:42  PM".to_datetime
 => Mon, 24 Aug 2015 23:42:00 +0000 
2.2.2 :004 > 

【问题讨论】:

  • 约翰,我的回答对你有帮助吗?如果您有任何其他问题,请告诉我。

标签: ruby-on-rails datetime timezone string-to-datetime


【解决方案1】:

不幸的是,这是designed behavior of to_datetime 函数。

这个other question 就是你所追求的。它们提供以下替代方案:

Time.zone.parse('24/08/2015 11:50  AM').to_datetime

甚至:

"24/08/2015 11:50  AM".to_datetime.in_time_zone("Mumbai")

【讨论】:

    【解决方案2】:

    使用来自ActiveSupport::TimeWithZonein_time_zone

    "2015-08-14 14:38".to_datetime.in_time_zone('Mumbai')
    => Fri, 14 Aug 2015 20:08:00 IST +05:30
    
    "2015-08-14 14:38".to_datetime.in_time_zone('Eastern Time (US & Canada)')
    => Fri, 14 Aug 2015 10:38:00 EDT -04:00
    
    Time.now.in_time_zone("Mumbai")
    => Sat, 22 Aug 2015 12:38:32 IST +05:30
    Time.now.in_time_zone("Pacific Time (US & Canada)")
    => Sat, 22 Aug 2015 00:08:21 PDT -07:00
    

    实际上,有几种方法可以做同样的事情,例如使用Time.zone.localTime.zone.parse 等。更多示例请参见上面的链接。

    回答您的确切问题,要传递在您的application.rb 文件中配置的time_zone,您必须使用这个:

    check_in =  DateTime.now
    check_in.in_time_zone(Rails.application.config.time_zone).to_datetime
    

    【讨论】:

      【解决方案3】:

      使用当地时间宝石。无论您身在何处,它都会显示当地时区的时间。 这是一个很好的解决方案,因为您不必每次在视图中显示日期时都调用时区方法。 Gem 也有很好的文档。访问https://github.com/basecamp/local_time

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-08-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多