tl;dr : アプリ全体で一貫性を確保するために、Date、Time、Datetime を操作するためのルールは何ですか?
Railsで日付と時刻とゾーンを操作することに頭を悩ませているので、すべての「ユーザー向け」の日付/時刻をタイムゾーンに合わせて調整したいときに誤ってUTCを使用しないようにしています。少なくとも私には矛盾しているように見えることに気づき、その背後にあるルールやロジックを理解したいと思っているので、再び「驚かれる」ことはありません。
1.9.3p194 :028 > e = Event.find(1)
Event Load (0.3ms) SELECT "events".* FROM "events" WHERE "events"."id" = $1 LIMIT 1 [["id", 1]]
=> #<Event id: 1, start_at: "2012-08-27 19:15:00", end_at: "2012-08-27 21:00:00", created_at: "2012-08-22 07:43:31", updated_at: "2012-08-23 03:01:59">
1.9.3p194 :037 > e.start_at # <== start_at is DateTime in model
=> Mon, 27 Aug 2012 12:15:00 PDT -07:00
1.9.3p194 :036 > e.start_at.to_time
=> 2012-08-27 19:15:00 UTC ### <=== This is in UTC.. ok...
1.9.3p194 :034 > DateTime.now
=> Thu, 23 Aug 2012 10:44:16 -0700 # <=== Also a DateTime
1.9.3p194 :035 > DateTime.now.to_time
=> Thu, 23 Aug 2012 10:44:19 -0700 ### <=== But this is in Pacific Time ?!?
to_time
?からの 2 つの異なる応答 それとも私は何かを逃しましたか?
DateTime のto_timeのかなり不可解なドキュメントでは、タイムゾーンについて言及されていません。
to_time() 自分自身を Ruby Time オブジェクトに変換しようとします。Ruby Time クラスの範囲外の場合、self を返します。self に 0 以外のオフセットがある場合、それを Time にマップする明確な方法がないため、self はそのまま返されます。
では、Rails から一貫した日付と時刻を取得するための「ルール」とは何でしょうか?