ruby-on-rails - 如何在 Rails 的特定时区安排工作人员的时间?

标签 ruby-on-rails ruby timezone utc

我有一个包含三个字段的表单:

  1. 日期
  2. 时间
  3. 时区

用户想为他在另一个国家的客户安排任务,也就是说,在另一个时区。因此,他将填写表格告知:

我希望此任务在伦敦时区 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/

相关文章:

ruby-on-rails - 如何汇总 Ruby on Rails 中连接表中的所有关联记录?

html - 如何移动搜索栏内的搜索按钮?

ruby-on-rails - 来自守护程序的错误响应:没有这样的容器:

ruby-on-rails - 如何连接两个事件记录结果以返回可以进一步过滤的新结果?

python time.strftime %z 始终为零而不是时区偏移量

MySQL格式问题

jenkins - 如何更改 Jenkins 的时区?

ruby-on-rails -/usr/bin/env ruby​​ 没有这样的文件或目录 : Using capistrano 3, capistrano/rbenv、capistrano/bundler 和 capistrano/rails(使用 rails 4)

ruby-on-rails - factory_bot 和factory_bot_rails gem 有什么区别?

sql - 使用 1 个查询对 ActiveRecord 中的对象进行计数和选择