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, TIMEve TIMESTAMPkolon veri tipleri; tıpkı sahip olduğunuz CHARgibi VARCHAR, FLOATve INTEGER.
Öyleyse sor, fark nedir? Bazıları açıklayıcı. DATEyalnızca bir tarih depolar, TIMEyalnızca günün bir saatini DATETIMEdepolar, her ikisini de depolar.
Arasındaki fark DATETIMEve TIMESTAMPbiraz daha ince olduğu: DATETIMEolarak 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ü DATETIMEher yıl, ay gün, saat, dakika basamaklı ve ikincisi, 8 bayt toplam kullanır mağazalarında. gibi TIMESTAMPsadece 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 :timestampve :datetime, varsayılan olarak sırasıyla ve DATETIMEiken :dateve :timekarşılık gelir .DATETIME
Bu, Rails içinde yalnızca tarih, saat veya her ikisini birden saklamanız gerekip gerekmediğine karar vermeniz gerektiği anlamına gelir.