我在数据库中有一个记录foo,它有:start_time:timezone个属性.

例如,:start_time是UTC-2001-01-01 14:20:00的时间.

我想创建一个新的时间对象,其值为:start_time,但其时区由:timezone指定.我不想先加载:start_time,然后再转换成:timezone,因为Rails会很聪明,会从UTC更新时间,使其与时区一致.

目前,

t = foo.start_time
=> 2000-01-01 14:20:00 UTC
t.zone
=> "UTC"
t.in_time_zone("America/New_York")
=> Sat, 01 Jan 2000 09:20:00 EST -05:00

相反,我想看看

=> Sat, 01 Jan 2000 14:20:00 EST -05:00

我想做:

t
=> 2000-01-01 14:20:00 UTC
t.zone = "America/New_York"
=> "America/New_York"
t
=> 2000-01-01 14:20:00 EST

推荐答案

听起来你想要的东西跟

ActiveSupport::TimeZone.new('America/New_York').local_to_utc(t)

这表示将本地时间(使用区域)转换为utc.如果你有Time.zone套,那么你当然可以

Time.zone.local_to_utc(t)

这不会使用附加到t的时区——它假定它是您转换的时区的本地.

这里需要注意的一个边缘情况是DST转换:您指定的本地时间可能不存在或可能不明确.

Ruby-on-rails相关问答推荐

在has_many关系中由两个条件 Select

仅在两个子域间共享Rails cookies,并为所有其他子域使用单独的cookie

Ruby 3 动态关键字参数

ArgumentError 用于 Ruby on Rails 中非常简单的初始化方法,没有参数

ruby on rails 中的自定义关联

Rails 'includes' 和 'where' 与 belongs_to 和 has_many 关联

为特定操作使用布局

Ruby - ActiveRecord::ConnectionNotEstablished

rails 4.0, rake db:sessions:create

如何在 rspec 测试中输出变量?

在 Rails 中创建随机 DateTime 的最佳方法

遇到在早期版本的 Rails 中使用 attr_accessible 的情况时,Rails 4 中的禁止属性错误

批量查找 mongoDB 记录(使用 mongoid ruby​​ 适配器)

Rails 3.1 Sprockets 需要指令 - 有没有办法排除特定文件?

在 Rails 路由中更改 id 参数

在 Rails 协会中未找到名为的协会可能拼写错误的问题

使用 ActiveRecord 获取列名

如何在 Rails 4 中测试控制器关注点

何时在 Ruby on Rails 中使用 lambda?

Date.current 和 Date.today 有什么区别?