100

Rails 3 でUTCTimeまたは現地時間への変換に問題があります。TimeWithZone

たとえば、 UTCmomentTime変数です (例: moment = Time.now.utc)。momentDST を考慮して (つまり、EST/EDT を使用して) 自分のタイム ゾーンに変換するにはどうすればよいですか?

より正確には、時刻が今朝の EDT 午前 9 時であれば「Monday March 14, 9 AM」、先週月曜日の AM 9 AM EST であれば「Monday March 7, 9 AM」と出力したいと思います。

うまくいけば、別の方法がありますか?

編集: 「EDT」は認識されるタイムゾーンである必要があると最初に考えましたが、「EDT」は実際のタイムゾーンではなく、タイムゾーンの状態に似ています。たとえば、 を求めても意味がありませんTime.utc(2011,1,1).in_time_zone("EDT")。「EST」実際のタイムゾーンであり、サマータイムを使用せず、(UTC-5) 年間のいくつかの場所で使用されるため、少し混乱します。

4

6 に答える 6

125

Time#localtimeコードを実行しているマシンの現在のタイム ゾーンで時刻が表示されます。

> moment = Time.now.utc
  => 2011-03-14 15:15:58 UTC 
> moment.localtime
  => 2011-03-14 08:15:58 -0700 

更新: 自分のタイムゾーンではなく特定のタイムゾーンに変換したい場合は、正しい方向に進んでいます。ただし、EST と EDT について心配する代わりに、一般的な東部時間帯を渡すだけです。EDT と EST のどちらであるかは、曜日に基づいて認識されます。

> Time.now.utc.in_time_zone("Eastern Time (US & Canada)")
  => Mon, 14 Mar 2011 11:21:05 EDT -04:00 
> (Time.now.utc + 10.months).in_time_zone("Eastern Time (US & Canada)")
  => Sat, 14 Jan 2012 10:21:18 EST -05:00 
于 2011-03-14T15:16:38.100 に答える
117

Rails には独自の名前があります。それらを見てください:

rake time:zones:us

rake time:zones:allすべてのタイム ゾーンに対して実行することもできます。ゾーン関連のレーキ タスクをさらに表示するには:rake -D time

したがって、EST に変換するには、DST に自動的に対応します。

Time.now.in_time_zone("Eastern Time (US & Canada)")
于 2011-03-14T15:23:10.110 に答える
17

システムのローカルゾーンを使用して簡単に設定できます.application.rbにこれを追加するだけです.

config.time_zone = Time.now.zone

次に、レールはローカルタイムでタイムスタンプを表示するか、この命令のようなものを使用してローカルタイムを取得できます

Post.created_at.localtime
于 2016-10-28T00:03:25.213 に答える
15

実際にはlocal_time、クライアント側でのみすべてを実行するために basecamp によって呼び出される素敵な Gem があると思います。

https://github.com/basecamp/local_time

于 2014-03-19T12:21:34.040 に答える
1

理由はわかりませんが、私の場合、以前に提案した方法では機能しません。しかし、それは次のように機能します:

Time.now.change(offset: "-3000")

もちろん、offset価値を自分のものに変える必要があります。

于 2016-05-22T04:27:07.130 に答える