我有一个包含三个字段的表单:
- 日期
- 时间
- 时区
用户想为他在另一个国家的客户安排任务,也就是说,在另一个时区。因此,他将填写表格告知:
我希望此任务在伦敦时区 12/08/2015 的 15:00 执行
我有这三个参数,我不介意用户此刻在哪里或者他来自哪里。我只想将这三个字段信息转换为 UTC 日期。
如何在唯一的 UTC 日期中转换这些字段?
最佳答案
要显式获取特定的 TimeZone
实例,请使用 ActiveSupport::TimeZone::[]
并调用ActiveSupport::TimeZone#parse
在该时区内创建一个 TimeWithZone
实例:
time = ActiveSupport::TimeZone['London'].parse('12/08/2015 15:00')
#=> Wed, 12 Aug 2015 15:00:00 BST +01:00
或使用 ActiveSupport::TimeZone#local
:
time = ActiveSupport::TimeZone['London'].local(2015, 8, 12, 15, 0)
#=> Wed, 12 Aug 2015 15:00:00 BST +01:00
调用 TimeWithZone#utc
返回 UTC 格式的 Time
实例:
time.utc
# => 2015-08-12 14:00:00 UTC
ActiveSupport 还提供 Time::use_zone
在 block 内设置 Time.zone
:
Time.use_zone('London') { Time.zone.parse('12/08/2015 15:00') }
#=> Wed, 12 Aug 2015 15:00:00 BST +01:00
请注意,ActiveRecord 会自动以 UTC 格式保存 DATETIME 字段,因此通常无需将时间转换为 UTC。
关于ruby-on-rails - 如何在 Rails 的特定时区安排工作人员的时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31286811/