【问题标题】:How do set ruby Gem Chronic's default timezone to Specific Timezone without rails如何将 ruby​​ Gem Chronic 的默认时区设置为没有导轨的特定时区
【发布时间】:2013-05-27 20:31:49
【问题描述】:

问题

默认情况下,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"

我怎样才能做到这一点?

【问题讨论】:

    标签: ruby sinatra chronic


    【解决方案1】:

    我会将此作为评论发布,因为我对基本上 someone else's answer 的任何功劳感到不舒服,但我在 cmets 中没有足够的空间。 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 设置您喜欢的方式运行整个应用程序,或者在退出时操纵时间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-01
      • 2022-01-24
      • 2011-11-21
      • 2011-07-01
      相关资源
      最近更新 更多