如何将时间字符串解析为特定时区?

时间:2012-10-08 00:25:36

标签: ruby time timezone

我有这个字符串:

  

10月7日星期日下午4:00

当我使用Time.parse时,Ruby假设时区是UTC。我怎么告诉Ruby给我-0700时区?我尝试过使用

tz.utc_to_local(Time.parse(string))

但我仍然回到UTC +0000时区。

2 个答案:

答案 0 :(得分:0)

确保您的时区设置正确

config.time_zone = 'Eastern Time (US & Canada)'

Time.parse应默认为当前时区,但您也可以尝试

Time.parse('####').in_time_zone

答案 1 :(得分:0)

“在解析时间信息时,如果不指定时区,就永远不要这样做。”

建议的宝石来自这个有用的博文:Working with time zones in Ruby on Rails

无论您是否使用rails,时间字符串始终都附加了时区。在您的情况下,您假设时间字符串具有-0700偏移量,但不将时区信息传递给解析方法(假设它是UTC)。

> Rails.application.config.time_zone
=> "Mountain Time (US & Canada)"

这是因为我有以下配置:

config.time_zone = 'Mountain Time (US & Canada)'

> string = "Sunday, Oct 7 4:00pm"
=> "Sunday, Oct 7 4:00pm"
> Time.parse(string)
=> 2012-10-07 16:00:00 -0600
> Time.parse(string).zone
=> "MDT"

在纯红宝石中的工作方式相同:

> require 'time'
=> true
> Time.local( 2012, 10, 07 )
=> 2012-10-07 00:00:00 -0600
> Time.local( 2012, 10, 07 ).zone
=> "MDT" 
> string = "Sunday, Oct 7 4:00pm"
=> "Sunday, Oct 7 4:00pm"
> Time.parse(string)
=> 2012-10-07 16:00:00 -0600
> Time.parse(string).zone
=> "MDT"