Ruby on rails 将带有一个时区的日期时间转换为utc
在我的rails4应用程序中,我用两个字符串表示日期,一个字符串表示时间戳,另一个字符串表示该日期所在的时区:Ruby on rails 将带有一个时区的日期时间转换为utc,ruby-on-rails,ruby,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 4,在我的rails4应用程序中,我用两个字符串表示日期,一个字符串表示时间戳,另一个字符串表示该日期所在的时区: a = "04/23/2014 04:00" b = "Eastern Time (US & Canada)" 我想将此日期转换为utc,以便我可以将其保存为utc "2014-04-23 08:00:00 UTC" 最好的方法是什么?使用DateTime类的in_time_zone方法 加载开发环境(Rails 2.3.2) 那么你的例子呢 a.in_time_zone(
a = "04/23/2014 04:00"
b = "Eastern Time (US & Canada)"
我想将此日期转换为utc,以便我可以将其保存为utc
"2014-04-23 08:00:00 UTC"
最好的方法是什么?使用DateTime类的in_time_zone方法 加载开发环境(Rails 2.3.2) 那么你的例子呢
a.in_time_zone('Eastern Time (US & Canada)')
使用RailsDateTime
类上的方法,可以从同时包含时间和时区的字符串中解析DateTime
对象(时区通过%z
指令传递)。从那里,您可以将时间转换为UTC:
a = "04/23/2014 04:00"
b = "Eastern Time (US & Canada)"
datetime_with_tz = DateTime.strptime([a, b].join(' '), "%m/%d/%Y %H:%M %z")
#=> Wed, 23 Apr 2014 04:00:00 -0500
datetime_with_tz.utc
#=> Wed, 23 Apr 2014 09:00:00 +0000
你只是复制了这个答案。这就是为什么它说Rails 2.3.2。OP要求在Rails 4中提供解决方案。但该操作也可以在Rails 4中工作,我没有尝试,但我认为它必须工作。a.in_time_zone('东部时间(美国和加拿大)')给出ArgumentError:ArgumentOut-rangedatetime=DateTime。解析(a)给出ArgumentError:invaliddate@JVK是 啊这是日期字符串格式的一个小问题。尝试使用以指定格式。我已经更新了我的答案以反映。@JKV,看看我更新的答案。它通过从时间字符串(包括时区)解析DateTime对象来减少步骤,从而可以从DateTime解析正确的UTC时间。使用
.UTC
以UTC格式获取时间
a = "04/23/2014 04:00"
b = "Eastern Time (US & Canada)"
datetime_with_tz = DateTime.strptime([a, b].join(' '), "%m/%d/%Y %H:%M %z")
#=> Wed, 23 Apr 2014 04:00:00 -0500
datetime_with_tz.utc
#=> Wed, 23 Apr 2014 09:00:00 +0000