输入时区中的Ruby / Rails Time.parse

时间:2014-12-08 18:28:13

标签: ruby-on-rails ruby timezone

我有一个字符串,其中包含带有时区的ISO8601格式的日期和时间。如何在字符串中指定的时区中获取TimeTimeWithTimezone对象?

PC的时区是' +01:00'并且ActiveSupport::TimeWithZone设置为UTC。这是我到目前为止所尝试的内容:

Loading development environment (Rails 3.2.13)
irb(main):001:0> Time.parse '1990-01-23T00:11:22-07:00'
=> 1990-01-23 08:11:22 +0100
irb(main):002:0> Time.zone.parse '1990-01-23T00:11:22-07:00'
=> Tue, 23 Jan 1990 07:11:22 UTC +00:00

这就是我想要的:

irb(main):001:0> Time.???? '1990-01-23T00:11:22-07:00'
=> 1990-01-23 00:11:22 -0700

如何解析字符串并在字符串中指定的时区中获取时间对象?

1 个答案:

答案 0 :(得分:2)

您的问题是您已使用Time,而必须使用DateTime

DateTime.strptime('1990-01-23T00:11:22-07:00', "%Y-%m-%dT%H:%M:%S%z")
#=> Tue, 23 Jan 1990 00:11:22 -0700 

修改

要使它成为Time类对象,你可以做类似这样的事情(有点难看,但它仍能完成它的工作):

date = DateTime.strptime('1990-01-23T00:11:22-07:00', "%Y-%m-%dT%H:%M:%S%z")
#=> Tue, 23 Jan 1990 00:11:22 -0700 
Time.new(date.year, date.month, date.day, date.hour, date.min, date.sec, date.zone)
#=> 1990-01-23 00:11:22 -0700