1

Time.parse 返回一个没有时区的 Time 对象。我想保留时区信息。有没有比下面的代码更好的方法来做到这一点?

def parse_with_timezone( string_input)
  /(.*)([+-]\d\d):?(\d\d)$/.match( string_input) do |match|
    tz = ActiveSupport::TimeZone[match[2].to_i.hours + match[3].to_i.minutes]
    tz.parse( match[1])
  end
end

输入是这样的字符串“2012-12-25T00:00:00+09:00”。此函数输出一个 TimeWithZone 对象。

4

3 回答 3

3

您是否在寻找当前本地时区的特定时区?

# Current zone
1.9.3p194> Time.zone.parse('2012-12-25T00:00:00+09:00')
=> Mon, 24 Dec 2012 15:00:00 UTC +00:00

控制台在上面设置为 UTC,但适用于您配置的任何内容

# Specific timezone 
1.9.3p194> Time.find_zone('Wellington').parse('2012-12-25T00:00:00+09:00')
=> Tue, 25 Dec 2012 04:00:00 NZDT +13:00 

我注意到您正在尝试通过 +9,例如

1.9.3p194> Time.zone = 'Tokyo'
=> "Tokyo" 
1.9.3p194> Time.zone.parse('2012-12-25T00:00:00+09:00')
=> Tue, 25 Dec 2012 00:00:00 JST +09:00

给你正确的结果。

于 2012-11-19T21:23:18.420 回答
1

Rails 时区 API 怎么样:http: //api.rubyonrails.org/classes/ActiveSupport/TimeZone.html

于 2012-07-24T02:18:21.277 回答
0

我更喜欢使用Chronic来满足我所有的日期/时间解析需求。

于 2012-07-24T04:17:13.230 回答