1

質問

デフォルトでは、Chronic gem はシステムのタイムゾーンをデフォルトのタイムゾーンとして使用します。

彼らはここ ( https://github.com/mojombo/chronic#time-zones ) で、ActiveSupports Time.zone を使用してこれを変更できると述べています。しかし、私はRailsを使用しておらず、Sinatraを使用しており、タイムゾーンクラスを利用するためだけに積極的なサポートを含める必要はないようです.

他にどうすればこれを行うことができますか?

私がやろうとしていること。

システム レポート/ダッシュボードと統計に Chronic を使用しています。

サーバーは、UTC 時間に DB の 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 に答える