2012-07-23 21 views
0

Time.parse返回一个没有时区的Time对象。我想保留时区信息。有没有更好的方式来做到这一点,然后下面的代码?Rails - 用时区解析时间的更好方法?

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对象。

回答

1

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

# 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 

我注意到你正在尝试这样一个例子

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 

通过+9给你正确的结果。

+0

我不知道什么时区是提前。这就是我解析它的原因。 – 2013-08-21 19:42:24

+1

在任何给定的时区偏移处没有单个时区。你所希望的最好的将是一系列可用的时区。由于每个时区可能位于不同的夏令时区域,因此这对您来说确实没有任何价值。时区不是微不足道的抵消,所以我不确定我是否理解你想要实现的目标。 – toxaq 2013-08-21 21:32:57

0

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

+0

慢性不会帮助我。它在该链接的底部指出,“当前不支持本地时区以外的时区”。 – 2012-07-24 14:55:15