Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 将带有一个时区的日期时间转换为utc_Ruby On Rails_Ruby_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails 将带有一个时区的日期时间转换为utc

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(

在我的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('Eastern Time (US & Canada)')
使用Rails
DateTime
类上的方法,可以从同时包含时间和时区的字符串中解析
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