Ruby 采用单独的时间和时区字符串,并转换为UTC

Ruby 采用单独的时间和时区字符串,并转换为UTC,ruby,datetime,timezone,timezone-offset,Ruby,Datetime,Timezone,Timezone Offset,我知道使用Ruby将本地时间转换为UTC时间的很多方法,但我不确定当时间和区域是独立的数据块时如何转换。如果我有类似于“12:00pm-0500”的内容,我可以使用.getutc()轻松地将其转换为UTC。但是,如果我有“下午12:00”和“东部时间(美国和加拿大)”怎么办?如何将这两者结合起来查找UTC时间?如果您使用的是Rails,或者如果您不介意需要ActiveSupport,则可以使用ActiveSupport::TimeZone来执行此操作 >> time_zone = "

我知道使用Ruby将本地时间转换为UTC时间的很多方法,但我不确定当时间和区域是独立的数据块时如何转换。如果我有类似于“12:00pm-0500”的内容,我可以使用
.getutc()
轻松地将其转换为UTC。但是,如果我有“下午12:00”和“东部时间(美国和加拿大)”怎么办?如何将这两者结合起来查找UTC时间?

如果您使用的是Rails,或者如果您不介意需要ActiveSupport,则可以使用ActiveSupport::TimeZone来执行此操作

>> time_zone = "Eastern Time (US & Canada)"
>> time_without_zone = "12:00 PM"
>> ActiveSupport::TimeZone[time_zone].parse(time_without_zone)
#=> Wed, 15 Nov 2017 12:00:00 EST -05:00

您可能正在寻找DateTime::parse方法

x = DateTime.parse("12:00 PM Eastern Time (US & Canada)")
将返回一个

#<DateTime: 2017-11-15T12:00:00-05:00 ((2458073j,61200s,0n),-18000s,2299161j)> 
#<DateTime: 2017-11-15T17:00:00+00:00 ((2458073j,61200s,0n),+0s,2299161j)>
将返回一个

#<DateTime: 2017-11-15T12:00:00-05:00 ((2458073j,61200s,0n),-18000s,2299161j)> 
#<DateTime: 2017-11-15T17:00:00+00:00 ((2458073j,61200s,0n),+0s,2299161j)>
#

我有“12:00 PM”和“东部时间(美国和加拿大)”-这是两个字符串吗?@Stefan是的,这是两个字符串这些字符串来自哪里?这需要一个stdlib
需要“datetime”
。此外,我还将使用
转换为\u Time