1

我对RoR比较陌生,并且遇到了时区转换问题。从数据库中获取数据(存储在美国中部时间)时,它认为那里的时间以UTC为单位,并尝试转换它们,因此使它们在5小时内错误。我在我的application.rb文件中有:Rails 3.1时区UTC和中心时区混淆

config.time_zone = 'Central Time (US & Canada)' 
config.active_record.default_timezone = 'Central Time (US & Canada)' 

如果我删除了其中一个配置指令,则时间不能正确保存。只要我有他们,时间正确地存储在数据库中,但RoR无法正确读取它们。为了解决这个问题,我必须将从数据库获得的所有时间都转换为UTC。我必须相信有更好的方法。

我也尝试设置ENV ['TZ'],但那似乎没有做任何事情。

ENV['TZ'] = "US/Central" 

任何帮助都会被处理。

谢谢!

+0

你有没有机会做* sane *的事情,并改变数据库本身的数据,所以它都是UTC?将数据全部存储在一个特定的(非UTC)时区是需要麻烦的 - 而且由于DST转换,它也会丢失信息。 –

+0

不幸的是,设计决策不在我的手中。对于这个项目,我被告知时间必须存储在美国中部时间。 – user1485753

+0

你的意思是在中部时间,对吧?不是CST,它总是*标准*时间。 –

回答

0

对我来说其实,AR拒绝设定值从别的东西:UTC /:本地

config.active_record.default_timezone = 'Central Time (US & Canada)' 

此行结束了日志充满了落回的警告:当地

什么工作是完全切换系统时区

ENV['TZ'] = "US/Central" 

请确保使用正确的tz名称。 Unix的时区的名字都没有那些的ActiveSupport :: TimeZone的使用

参考的ActiveSupport ::时区::这个

而且MAPPING,注意,这Time.now == Time.current后;它也会在指定的时区给予时间;

所以这是一种比解决方案更多的破解。