【问题标题】:How do I parse a time string to a specific timezone?如何将时间字符串解析为特定时区?
【发布时间】:2012-09-28 05:58:20
【问题描述】:

我有这个字符串:

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

当我使用Time.parse 时,Ruby 假定时区是 UTC。我如何告诉 Ruby 给我 -0700 时区?我试过使用

tz.utc_to_local(Time.parse(string))

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

【问题讨论】:

  • 您输入的时区是什么?
  • Err,服务器在 +0000 时区,输入本身在太平洋时区,但我无法将该信息传达给 Ruby。

标签: ruby time timezone


【解决方案1】:

“在解析时间信息时,切勿在未指定时区的情况下进行解析。”

建议的精华来自这篇有用的博文:Working with time zones in Ruby on Rails

无论您是否使用 Rails,时间字符串总是附加一个时区。在您的情况下,您假设时间字符串具有 -0700 偏移量,但没有将时区信息传递给 parse 方法(假设它是 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"

在纯 ruby​​ 中也以同样的方式工作:

> 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"

【讨论】:

  • 1.我没有使用 Rails。 2. 在第三个示例中,我看不到您在哪里设置时区,所以我假设 #zone 只返回您机器的时区。
  • 是的。 ruby 进程获取本地机器的时区。
  • 服务器位于 UTC 时区,但我想将其解析为 -0700 时区,因此存在问题。还是谢谢。
【解决方案2】:

确保您的时区设置正确

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

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

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

【讨论】:

  • 这不是特定于 Rails 的吗?这个问题没有提到rails。
  • 是的,它的 activesupport 是特定的,但 Time.parse 也是如此
  • @pguardiario 我在项目中既没有 Rails 也没有 activesupport。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-10
  • 1970-01-01
  • 2021-10-21
  • 1970-01-01
  • 1970-01-01
  • 2015-04-02
相关资源
最近更新 更多