В Ruby on Rails каква е разликата между DateTime, Timestamp, Time и Date?

В моя опит получаването на дати / часове е правилно, когато програмирането винаги е изпълнено с опасност и трудност.

Ruby и Rails винаги са ме избягвали, макар и само поради големия брой опции; Никога не подозирам, че трябва да избера.

Когато използвам Rails и погледна типовете данни на ActiveRecord, мога да намеря следното

: datetime,: timestamp,: time и: date

и нямам представа какви са разликите или къде са скрити пропастите.

Каква е разликата? За какво ги използвате?

(PS Използвам Rails3)

357
14 окт. зададен от Ник Май 14 Октомври 2010-10-14 00:40 '10 в 0:40 2010-10-14 00:40
@ 2 отговора

Разликата между различните формати за дата и час в ActiveRecord има малко общо с Rails и всичко свързано с база данни, която използвате.

Използвайки MySQL като пример (ако не защото е най-популярен), вие имате типовете данни на колоните DATE , DATETIME , TIME и TIMESTAMP ; точно както имате CHAR , VARCHAR , FLOAT и INTEGER .

Затова питате, каква е разликата? Е, някои от тях не изискват обяснение. DATE съхранява само датата, TIME съхранява само времето от деня, а DATETIME съхранява и двете.

Разликата между DATETIME и TIMESTAMP малко по-фина: DATETIME форматиран като YYYY-MM-DD HH:MM:SS . Валидните диапазони се движат от 1000 до 9999 (и всичко между тях. Въпреки че TIMESTAMP изглежда подобно, когато го изтеглите от базата данни, това наистина е само предна част за времевата таблица на unix . Неговият действителен диапазон варира от 1970 до 2038 година. Функциите в двигателя на базата данни са пространството за съхранение.Тъй като DATETIME съхранява всяка цифра в годината, месеца, часа, минута и второ, използва общо 8 байта. Тъй като TIMESTAMP съхранява само броя на секундите от 1970-01-01, използва 4 байта.

Научете повече за разликите между форматите за време в MySQL тук .

В крайна сметка, тя се свежда до това, което искате да направи дата / време колона. Трябва ли да запазвате дати и часове преди 1970 г. или след 2038 г.? Използвайте DATETIME . Трябва да се притеснявате за размера на базата данни, а вие сте в този тайманг? Използвайте TIMESTAMP . Трябва само да запазите датата? Използвайте DATE . Трябва само да съхраните времето? Използвайте TIME .

Като казах всичко това, Rails всъщност прави някои от тези решения за вас . И двете :timestamp и :datetime ще бъдат DATETIME по подразбиране, докато :date и :time съответстват съответно на DATE и TIME .

Това означава, че в Rails само трябва да решите дали трябва да съхраните датата, часа или и двете.

499
14 окт. отговор, даден vonconrad 14 окт. 2010-10-14 03:10 '10 в 3:10 2010-10-14 03:10
  • : datetime (8 байта)

    • Запишете датата и часа във формат ГГГГ-ММ-ДД Ч: MM: СС
    • Полезно за колони от тип birth_date
  • : timestamp (4 байта)

    • Запазва броя на секундите от 1970-01-01
    • Полезно за колони като updated_at, created_at
  • : дата (3 байта)
    • Дата на публикуване
  • : time (3 байта)
    • Време за съхранение
border=0
1
13 окт. Дайте отговор ninjarails 13 октомври 2017-10-13 06:13 '17 в 6:13 2017-10-13 06:13