我不是指

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 var中增加4小时才能获得UTC,如果该日期以标准时间(ST)表示,必须将5小时添加到我们的Eastern_date_time变量中。

我们如何指定我们拥有的是东部日期时间,然后将其转换为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实际上是东部...,以便当我们在16:30:00上执行myEasterDateTime.utc时,最终得到20:30:00。

我该怎么做?

最佳答案

有一个 time_in_zone method in the DateTime class:

now.time_in_zone('UTC')

此后一直是renamed to in_time_zone :
DateTime.now.in_time_zone('US/Pacific')
 => Wed, 22 Apr 2015 12:36:33 PDT -07:00

09-25 15:42