我通过将此行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 >
答案 0 :(得分:2)
in_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.local
,Time.zone.parse
等。有关更多示例,请参阅上面的链接。
要回答您的确切问题,要传递time_zone
文件中配置的application.rb
,您必须使用此功能:
check_in = DateTime.now
check_in.in_time_zone(Rails.application.config.time_zone).to_datetime
答案 1 :(得分:2)
遗憾的是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 :(得分:0)
使用本地时间宝石。无论您身在何处,它都会以当地时区显示时间。 这是一个非常好的解决方案,因为每次在视图中显示日期时,您都不必使用时区方法。宝石也有非常好的文档。访问https://github.com/basecamp/local_time