2013-02-11 39 views

回答

1

DateTime被普遍認爲是一個Rails的東西,它創建時要圍繞數據庫中相應的DATETIME列。就日期範圍而言,這些列比Time靈活得多,因此需要新類型來捕獲所有可能的值。在Ruby 1.8.6中,1.8.7的早期版本僅限於標準的1901-2038範圍,在內部表示爲無符號長整型(32位)編號。

現在的差異大多是微小的,儘管在Rails中大部分時間的計算方法都只是DateTime。

我真的不會擔心你使用哪個DateTime或Time,除非你有一個特別好的理由來比較另一個。如果您從Rails獲取DateTime對象,請使用流程並使用這些對象。如果你正在構建你自己的Ruby應用程序,你可以做任何你想做的事情。

+0

這是錯誤的。 Rails使用'ActiveSupport :: TimeWithZone'。是的,時區處理並不總是存在,但'DateTime'早於Rails。請參閱[https://github.com/ruby/ruby/blob/dc9cd6a8c22ad04baa7498fd0cbc5d519ed73be0/lib/date.rb#L436]。如果你仔細研究它,那麼在DateTime中也存在嚴重的缺陷。 – 2013-02-11 04:14:59

+0

從歷史上看,使用'DateTime'可能會有更廣泛的日期範圍,但即使在1.8.7(我現在已經安裝的唯一「舊」ruby)中,我也可以創建'Time.utc(-2500, 12,31,12,34,56)'很好:也許是64位操作系統的問題? – 2013-02-11 04:29:43

+2

我不確定Time是否被修補以涵蓋範圍更廣的範圍,但原始版本嚴格符合32位,並會在1901年至2038年之間出錯。這可能是從Ruby 1.9開始的一個修復進入1.8.7系列。在1.8.6中測試會產生「RangeError:bignum太大而不能轉換爲」long「」。 – tadman 2013-02-11 04:48:28

相關問題