【问题标题】:How to change the time zone on a TimeWithZone object?如何更改 TimeWithZone 对象的时区?
【发布时间】:2014-09-22 09:02:27
【问题描述】:

我正在开发一个具有 config.time_zone = 'Kolkata'(UTC +5:30)的应用程序,我正在尝试为 EST/EDT 中的特定对象节省时间(UTC -5:00/- 4:00) 从 ActiveAdmin 面板。

由于它涉及夏令时,我宁愿不求助于手动计算并将 ActiveSupport::TimeWithZone 对象从 UTC +530 转换为 UTC -400。是否可以只更改 TimeWithZone 对象的区域部分而不进行转换?

附:我确实遇到了this question。但它没有我正在寻找的答案。(其中一个 cmets 甚至提到它)

【问题讨论】:

  • 也在寻找类似 DateTime 的 change 方法,我们可以在其中指定时区偏移量。

标签: ruby-on-rails ruby activeadmin activesupport


【解决方案1】:

建议所有日期时间对象应始终存储在 UTC -0000 中,如 here 所述。如果您还想将其转换为进行一些计算,请使用utc_offset 方法或使用utc 方法将两个对象转换为UTC,如here 所示。

【讨论】:

  • 当然,而且我知道 Rails 内部确实以 UTC 格式存储 DateTime 对象(即使您有一个设置的 config.time_zone)。我特别需要能够将对象实例解析为不同的 time_zones。因为我将在印度和美国东部拥有用户。这是一个敏感问题,因为 DateTime 对象会向下级联到我的应用程序的其他部分。我希望能够在确切的时间过期优惠/活动。例如:一个活动正好在美国东部时间下午 12:15 开始,所以销售需要在那个时候结束。目前,由于该应用仅解析为 IST,因此我正在手动计算偏移量。
  • @Ameen 您可以将两个时间都转换为 UTC 以检查销售是否需要关闭。或者,您可以使用Time.now.in_time_zone("Eastern Time (US & Canada)") 将时间更改为您想要的任何时区。要查看所有可用时区的字符串,请运行 rake time:zones:all
猜你喜欢
  • 1970-01-01
  • 2019-11-18
  • 2014-11-14
  • 2019-01-25
  • 1970-01-01
  • 1970-01-01
  • 2014-11-14
  • 1970-01-01
相关资源
最近更新 更多