tl;dr:使用日期、时间和日期时间的规则是什么,这样我才能确保我的应用程序的一致性?
我试图在 Rails 中使用 Dates & Times & Zones,所以当我真的希望所有“面向用户”的日期/时间都针对时区进行调整时,我不会意外使用 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 ?!?
2 不同的反应to_time
?还是我错过了什么?
DateTime 的to_time相当神秘的文档没有提到时区:
to_time() 尝试将 self 转换为 Ruby Time 对象;如果超出 Ruby Time 类的范围,则返回 self。如果 self 的偏移量不是 0,则 self 将原样返回,因为没有干净的方法将其映射到 Time。
那么从 Rails 中获得一致的日期和时间的“规则”是什么?