【问题标题】:Ruby/Rails Time.parse in input timezone输入时区中的 Ruby/Rails Time.parse
【发布时间】:2014-12-08 18:28:13
【问题描述】:

我有一个字符串,其中包含 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

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

【问题讨论】:

标签: ruby-on-rails ruby timezone


【解决方案1】:

您的问题是您使用了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

【讨论】:

  • 有没有办法使用 Time 类?
  • @xx77aBs 编辑了答案,让你获得 Time 类对象
猜你喜欢
  • 2018-05-05
  • 2012-11-07
  • 2018-10-21
  • 2011-12-04
  • 1970-01-01
  • 2014-07-02
  • 2018-03-01
  • 1970-01-01
  • 2018-12-11
相关资源
最近更新 更多