В Ruby on Rails, какая разница между DateTime, Timestamp, Time и Date?

По моему опыту, получение дат / времени прямо, когда программирование всегда чревато опасностью и трудностью.

Ruby и Rails всегда избегали меня на этом, хотя бы из-за огромного количества опций; Я понятия не имею, что я должен выбрать.

Когда я использую Rails и смотрю на типы данных ActiveRecord, я могу найти следующее

: datetime,: timestamp,: time и: date

и не имеют представления о том, что такое различия или где скрываются браки.

Какая разница? Для чего вы их используете?

(PS Я использую Rails3)

    Разница между разными форматами даты и времени в 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 байтов. хранит количество секунд с 1970-01-01, он использует 4 байта.

    Вы можете больше узнать о различиях между форматами времени в MySQL здесь .

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

    Сказав все это, Rails фактически принимает некоторые из этих решений для вас . Оба :timestamp и :datetime умолчанию будет DATETIME , а :date и :time соответствует DATE и TIME , соответственно.

    Это означает, что в Rails вам нужно только решить, нужно ли вам хранить дату, время или и то, и другое.

    1. : datetime (8 байт)

      • Магазины Дата и время отформатированы ГГГГ-ММ-ДД ЧЧ: ММ: СС
      • Полезно для столбцов типа birth_date
    2. : timestamp (4 байта)

      • Сохраняет количество секунд с 1970-01-01
      • Полезно для столбцов, таких как updated_at, created_at
    3. : дата (3 байта)
      • Магазины
    4. : время (3 байта)
      • Магазины
    Давайте будем гением компьютера.