1

问题

默认情况下,Chronic gem 使用系统时区作为默认时区。

他们在这里(https://github.com/mojombo/chronic#time-zones)提到,我可以使用 ActiveSupports Time.zone 来改变它。但是我没有使用 Rails,我使用的是 Sinatra,并且仅仅为了利用 timezone 类而包含主动支持似乎没有必要。

我还能怎么做?

我正在尝试做的事情。

我将 Chronic 用于系统报告/仪表板和统计信息。

服务器在 UTC 时间将时间戳存储在数据库中的 created_at 字段中。当然,我们将报告作为 PDT 运行。

我想将默认时区设置为 America/Los_Angeles。以便:

d = Chronic.parse("1 days ago at midnight")  
date = d.localtime   #Should give me a date like "2013-05-27 00:00:00"
utc_date = date.utc  #Should give me a date like "2013-05-27 07:00:00"

我怎样才能做到这一点?

4

1 回答 1

1

我会将此作为评论发布,因为我不愿意为基本上是其他人的答案而受到任何赞扬,但我在评论中没有足够的空间。环境变量在这些TZ情况下很有帮助。看看这个:

def with_time_zone(tz_name)
  prev_tz = ENV['TZ']
  ENV['TZ'] = tz_name
  yield
ensure
  ENV['TZ'] = prev_tz
end

with_time_zone('US/Pacific') { Chronic.parse("1 days ago at midnight") }
# => 2013-05-27 08:00:00 0100
with_time_zone('US/Pacific') { Chronic.parse("1 days ago at midnight").localtime }
# => 2013-05-27 00:00:00 -0700

您可以使用正确的区域设置服务器的本地时间,让整个应用程序以TZ您喜欢的方式运行 var 设置,或者在退出时操纵时间。

于 2013-05-27T21:51:54.503 回答