我已经将时区设置为/config/application.rb,我希望我的应用程序中生成的所有时间默认都在这个时区,但当我创建一个新的DateTime对象(使用.new)时,它会在GMT中创建它.我怎样才能让它位于我的应用程序的时区?

/config/application.rb

config.time_zone = 'Pacific Time (US & Canada)'

irb

irb> DateTime.now
=> Wed, 11 Jul 2012 19:04:56 -0700 

irb> mydate = DateTime.new(2012, 07, 11, 20, 10, 0)
=> Wed, 11 Jul 2012 20:10:00 +0000                    # GMT, but I want PDT

使用in_time_zone不起作用,因为这只是将GMT时间转换为PDT时间,而PDT时间是错误的:

irb> mydate.in_time_zone('Pacific Time (US & Canada)')
=> Wed, 11 Jul 2012 13:10:00 PDT -07:00               # wrong time (I want 20:10)

推荐答案

您可以使用ActiveSupport的TimeWithZone(Time.zone)对象在应用程序的时区中创建和解析日期:

1.9.3p0 :001 > Time.zone.now
 => Wed, 11 Jul 2012 19:47:03 PDT -07:00 
1.9.3p0 :002 > Time.zone.parse('2012-07-11 21:00')
 => Wed, 11 Jul 2012 21:00:00 PDT -07:00 

Ruby-on-rails相关问答推荐

为Rails服务器推荐的交付类型

如何在嵌套路由中使用Ruby on rails多态关联

在Ruby on Rails中获取堆栈级别太深错误(&Q)

我如何在不在 gemfile 中的 rake 任务中要求 gem?

设计 token_authenticable 已弃用,有什么替代方案?

Rails 3 - Select 包含?

Rails 是否带有未授权异常?

Rails 3 中的动态错误页面

Rails:参数太少

mongoid 中 embeds_many 和 has_many 的区别

在 Rails 中将表格行变成链接

从 Rails 模型内部访问翻译文件 (i18n)

如何将变量 link_to 定义为外部 URL

Ruby on Rails 中的MySQL 服务器已经消失

保存后重定向到索引而不是显示

用户注册时设计确认令牌无效

在 Devise on Rails beta 3 中创建管理员用户

Ruby中的参数化获取请求?

如何翻译 ActiveRecord 模型类名称?

错误:无法在 Mavericks 上构建 gem 原生扩展