我不是指
myDateTime = DateTime.now
myDateTime.new_offset(Rational(0, 24))
字符串
或者是
Time.now.utc
型
我有一个文本日期是东部时间。
我可以将文本日期转换为DateTime。我们称之为eastern_date_time
。
现在,我们有一个包含DateTime的变量,但除了我们之外,没有人知道它是东方的。我们自己转换它会很麻烦。如果日期是夏令时(DST)(今年3月8日至11月1日),我们必须在eastern_date_time变量中添加4小时才能获得UTC,如果日期是标准时间(ST),我们必须在eastern_date_time变量中添加5小时。
我们如何指定我们拥有的是东部日期时间,然后将其转换为UTC。确定日期是否在DST/ST中,并正确应用4或5小时?
我想把我得到的任何日期转换成UTC,以便存储在我的数据库中。
编辑:
使用`in_time_zone ',我无法将东部文本时间转换为UTC。我怎样才能实现这个目标?比如...
text_time = "Nov 27, 2015 4:30 PM" #given as Eastern
myEasternDateTime = DateTime.parse text_time # => Fri, 27 Nov 2015 16:30:00 +0000
#now we need to specify that this myEasternDateTime is in fact eastern. However, it's our default UTC. If we use in_time_zone, it just converts the date at UTC to Eastern
myEasternDateTime.in_time_zone('Eastern Time (US & Canada)') # => Fri, 27 Nov 2015 11:30:00 EST -05:00
myEasternDateTime.utc # => Fri, 27 Nov 2015 16:30:00 +0000
型
这不是我们想要的我们必须指定myEasterDateTime实际上是EasterDateTime。所以当我们在16:30:00做myEasterDateTime.utc
时,我们最终得到的是20:30:00。
我怎么能做到这一点?
4条答案
按热度按时间pbpqsu0x1#
有一个
time_in_zone
method in the DateTime class:字符串
它是renamed to
in_time_zone
:型
您目前可以通过以下方式获得所有美国区域的列表(2023 / Rails 7)
型
或另一个国家:
型
evrscar22#
Time类的对象有一个名为
dst?
的方法,它基本上告诉你DST是否适用。因此,您基本上可以确定DST/ST是否适用,并决定添加-4或5。例如
Time.now.dst?
如果返回true,则加4,否则加5。ijxebb2r3#
在时区建议的帮助下我得到了这样的结果。
字符串
ldxq2e6h4#
在编辑后的文章中,您的时间字符串需要从UTC偏移。
**编辑III:**基于注解(仅设置一个字符串来表示东部时间,并需要考虑DST等)
字符串