ruby-on-rails - 如何将时间移动(而不是转换)到新时区?

标签 ruby-on-rails ruby timezone

我有一个日期时间 d和一个字符串 tz这是有效的 ActiveSupport::TimeZone key (例如“UTC”、“东部时间(美国和加拿大)”、“美国/芝加哥”等)。我如何获得一个新的 DateTime d2 以便一切都相同,但偏移量为 d2现在反射(reflect)对应于 tz 的时区?

请注意,我不想将时间转换到新时区。我想要一个新的 DateTime,其他一切都相同,但偏移量不同。

例如,如果我有 d = <today @ 5:00 PM UTC> , 和 tz = 'Central Time (US & Canada)' ,我要的是d2 = <today @ 5:00 PM -0600> , 不是 d2 = <today @ 11:00 AM -0600> .

最佳答案

给定 tz,您可以将其转换为一天的小数部分的偏移量:

offset = ActiveSupport::TimeZone.new(tz).utc_offset / 60 / 60 / 24.0
=> -0.25 # for 'Central Time (US & Canada)'

然后您可以将其与 d 中的现有详细信息一起传递到 DateTime.civil 以创建新对象:

d2 = DateTime.civil(d.year, d.month, d.day, d.hour, d.min, d.sec, offset)

关于ruby-on-rails - 如何将时间移动(而不是转换)到新时区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4656740/

相关文章:

ruby-on-rails - Rails 和模型验证

ruby-on-rails - 使用 rake 命令在 Rails 中创建数据库

ruby - 是否有等效于 Rails `try` 函数的 Elixir?

ruby-on-rails - Rails 控制台不工作 "You may have encountered a bug"

mysql - mySQL如何确定TIMESTAMP字段的时区?

ruby-on-rails - 使用 Chartkick 添加注释

ruby-on-rails - 从 Django 到 Rails

jquery - RoR - 如何在下拉列表中添加图标

mysql - mysql.timezone_name 的 Time_zone_id 是 "static"吗?

javascript - PHP 日期和时区