【发布时间】:2014-10-08 16:55:40
【问题描述】:
我正在构建一个具有混合 UTC/PST 数据源的 Sinatra 站点,但将在 PST 中查看。所以我需要一种方法来轻松地将时间对象从 UTC 转换为 PST。
如果没有 Rails,我将无法访问 Time.zone、in_time_zone 等。
我只需要更改 Time 对象的时区,例如2014-08-14 21:44:17 +0000 => 2014-08-14 14:44:17 -0700.
首先我尝试了这个:
class Time
def to_pst
self.utc + Time.zone_offset('PDT')
end
end
但这会改变实际的时间戳,而不是区域。我需要time.to_i 和time.strftime 才能工作;所以我不能改变时间戳的绝对值。
> t = Time.now
=> 2014-08-14 21:46:20 +0000
> t.to_pst
=> 2014-08-14 14:46:20 UTC
> t.to_i
=> 1408052780
> t.to_pst.to_i
=> 1408027580
gem 'timezone' 提出了类似的问题。
This 解决方案有效,但会更改全局变量并且不是线程安全的。
操作系统时区需要保持 UTC。
我只需要一种方法来更改单个 Time 对象的时区。这是一个简单的问题,似乎应该有一个简单的解决方案!有人找到了吗?提前致谢!
【问题讨论】:
-
考虑使用TZInfo gem。此外,您应该使用完整的 IANA 时区标识符
'America/Los_Angeles'。时区缩写可能不明确(例如,CST 有 5 种不同的含义)。
标签: ruby time timezone sinatra