ActiveRecord'daki farklı tarih / saat biçimleri arasındaki farkın Rails ile ilgisi yoktur ve hangi veritabanını kullanırsanız kullanın.
(Eğer en popüler olduğundan başka bir nedenle) bir örnek olarak MySQL kullanarak, sahip DATE
, DATETIME
, TIME
ve TIMESTAMP
kolon veri tipleri; tıpkı sahip olduğunuz CHAR
gibi VARCHAR
, FLOAT
ve INTEGER
.
Öyleyse sor, fark nedir? Bazıları açıklayıcı. DATE
yalnızca bir tarih depolar, TIME
yalnızca günün bir saatini DATETIME
depolar, her ikisini de depolar.
Arasındaki fark DATETIME
ve TIMESTAMP
biraz daha ince olduğu: DATETIME
olarak biçimlendirilir YYYY-MM-DD HH:MM:SS
. Geçerli aralıkları 9999 (ve arasındaki her şeyi her yıl 1000 gidin. Ederken TIMESTAMP
görünüyor Eğer veritabanından getir zaman benzer, gerçekten için adil bir öncü Unix zaman damgası . Onun geçerli aralık 1970 den 2038 fark gider burada, dahili veritabanı motoru içinde fonksiyonlar, depolama alanı çeşitli olduğunu bir kenara gelen. Çünkü DATETIME
her yıl, ay gün, saat, dakika basamaklı ve ikincisi, 8 bayt toplam kullanır mağazalarında. gibi TIMESTAMP
sadece sayı depolayan 1970-01-01'den bu yana saniye cinsinden 4 bayt kullanır.
MySQL'de saat formatları arasındaki farklar hakkında daha fazla bilgiyi buradan edinebilirsiniz .
Sonunda, tarih / saat sütununuz için ihtiyacınız olan şeylere gelir. Tarih ve saatleri 1970'den önce veya 2038'den sonra mı depolamanız gerekiyor? Kullanın DATETIME
. Veritabanı boyutu hakkında endişelenmeniz gerekiyor mu? Kullanın TIMESTAMP
. Yalnızca bir tarih depolamanız mı gerekiyor? Kullanın DATE
. Sadece bir zaman depolamanız mı gerekiyor? Kullanın TIME
.
Tüm bunları söyledikten sonra, Rails aslında bu kararların bazılarını sizin için verir . Her ikisi de :timestamp
ve :datetime
, varsayılan olarak sırasıyla ve DATETIME
iken :date
ve :time
karşılık gelir .DATE
TIME
Bu, Rails içinde yalnızca tarih, saat veya her ikisini birden saklamanız gerekip gerekmediğine karar vermeniz gerektiği anlamına gelir.