我需要将Date对象转换为TimeWithZone对象,该对象代表给定时区中该天的开始。

以下方法有效,但似乎过于复杂,因为它要求我将日期转换为字符串:

?> date = Date.parse("2010-02-17")
=> Wed, 17 Feb 2010
>> ActiveSupport::TimeZone['Eastern Time (US & Canada)'].parse(date.to_s)
=> Wed, 17 Feb 2010 00:00:00 EST -05:00
>> ActiveSupport::TimeZone['UTC'].parse(date.to_s)
=> Wed, 17 Feb 2010 00:00:00 UTC 00:00

有什么更好的方法我想念吗?

编辑:
人们建议以下方面的变化:
?> date.to_datetime.in_time_zone('Eastern Time (US & Canada)').beginning_of_day
=> Tue, 16 Feb 2010 00:00:00 EST -05:00

如您所见,这不是等效转换,因为它是在2月16日美国东部时间开始,而不是2月17日美国东部时间开始。

最佳答案

我参加聚会迟到了,但这仍然是一个很大的问题。 ActiveSupport的in_time_zone自O.P.以来就引入了,但是它完全可以实现您想要的功能,而无需解析字符串(慢速)或设置Time.zone(风险):

>> date = Date.parse("2010-02-17")
=> Wed, 17 Feb 2010
>> date.in_time_zone('Eastern Time (US & Canada)')
=> Wed, 17 Feb 2010 00:00:00 EST -05:00

当然,如果您希望在utc表示一天的开始,则可以执行以下操作:
>> date.in_time_zone('Eastern Time (US & Canada)').utc
=> 2010-02-17 05:00:00 UTC

关于ruby-on-rails - 将Date对象转换为TimeWithZone,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2518398/

10-14 13:47
查看更多