0

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 > 
4

3 回答 3

2

不幸的是,这是to_datetime函数的设计行为。

另一个问题是你所追求的。它们提供以下替代方案:

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

甚至:

"24/08/2015 11:50  AM".to_datetime.in_time_zone("Mumbai")
于 2015-08-22T07:07:43.240 回答
2

in_time_zoneActiveSupport::TimeWithZone使用

"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

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

回答您的确切问题,要传递文件中的time_zone配置application.rb,您必须使用以下命令:

check_in =  DateTime.now
check_in.in_time_zone(Rails.application.config.time_zone).to_datetime
于 2015-08-22T07:03:12.253 回答
0

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

于 2015-08-22T09:47:57.653 回答