我在数据库中有一个记录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

用至少一个缺省值初始化Ruby数组的最简洁方法是什么?

Ruby Hash 中 tap / delete 和 except 的区别

select2 未应用于所有下拉列表;它只适用于数据的最后一条记录

如何不需要rails/all?

我真正运行的是哪个 Ruby 版本?

验证模型属性大于另一个

Ruby on Rails 有没有好的管理生成器?

如何在 Rails 中使用延迟作业(job)取消预定作业(job)?

使用 Rspec 测试 Rails 3.1 可安装引擎

FactoryGirl + Faker - 为数据库种子数据中的每个对象生成相同的数据

如何在 Ruby on Rails 中的 cookie 上设置 HttpOnly 标志

在 Rails 4 中检测用户代理 - 读取 HTTP 标头

我可以将默认值传递给 rails 生成迁移吗?

rails回形针和乘客`'识别'命令无法识别`

通过 Ruby 或 Rails 的 LDAP

Rails HABTM - 正确删除关联

如何使用 Rails 3 获取请求的目标控制器和操作?

ArgumentError:ApplicationController 的副本已从模块树中删除,但仍处于活动状态

没有路由匹配缺少必需的键:[:id]