Вы можете использовать целые числа или какой-либо другой подходящий тип для представления значений даты / времени в вашей базе данных.Однако это создает пару проблем:
Все ваши текущие и будущие (!!!) приложения (Java или другие), которые используют таблицы базы данных, должны преобразовываться между целыми числами базы данных изначения даты / времени.
Если ваши запросы SQL, хранимые процедуры SQL или триггеры SQL включают соответствующие столбцы, им может потребоваться выполнить преобразования.Это делает их более сложными / трудно получить право.Кроме того, дополнительная сложность может привести к тому, что механизм запросов перейдет на более медленный способ выполнения вашего запроса ... потому что оптимизатор запросов не понимает, что вы делаете.
Использованиецелые числа для представления дат затруднят выполнение специальных SQL-запросов к таблице, включающей столбцы даты.
РЕДАКТИРОВАТЬ
Экономия пространства путем представления дат в виде целых чисел зависит от базы данных.IIRC, Oracle хранит значения даты / времени в виде простых целых чисел.И я ожидаю, что любая приличная СУБД будет делать то же самое ... и для хранения, и для эффективности запросов.
Хранение значений даты / времени в виде целых чисел не решает проблему часового пояса.Это принципиально сложная проблема.
- В некоторых случаях вы хотите, чтобы дата или дата / время представляли абсолютную точку во времени.
- В других случаях вы хотите, чтобы она представляла точку во времени относительногеографическое местоположение / часовой пояс, в котором произошло какое-то событие.
- В других случаях вы хотите представить время относительно местоположения системы или пользователя.
Тогдаэто вопрос гранулярности.(Для ясности используется синтаксис даты ISO) означает ли "1999" то же самое, что и "1999-01-01" или "1999-01-01T00: 00: 00"?А как насчет точности до секунды?
Дело в том, что ни одно простое SQL-представление даты / времени (или целое число) не может справиться со всем этим.Основная причина ошибок / проблем / трудностей, с которыми мы сталкиваемся, заключается в том, что программисты используют ярлыки в своей реализации и (что еще более важно) неаккуратны в своем мышлении.
EDIT 2
По-прежнему существует проблема, заключающаяся в том, что многие проблемы все еще возникают из-за различий в способах обработки различными базами данных и их соответствующими драйверами JDBC литералов даты и предположений о часовых поясах.Я не эксперт по JDBC и стандарту (ам) SQL, но проблемы с корнем выглядят следующим образом:
- Поставщики баз данных не полностью реализовали типы datetime, как указано в (например) SQL-92.
- Стандарты SQL не определяют единый синтаксис для литералов даты и времени, но разрешают синтаксисы, специфичные для поставщика базы данных.
- Стандарты SQL позволяют устанавливать часовой пояс по умолчанию без какого-либо стандартного способауказать (или даже выяснить), что он по умолчанию.Больше решений для конкретного поставщика.
- Спецификация JDBC не предоставляет приложению способа получить или установить часовой пояс по умолчанию или выбрать литеральные синтаксисы даты и времени.
Всеиз этого складывается беспорядок переносимости и проблем конфигурации для разработчика Java.Однако я не думаю, что это значительно хуже, чем проблемы с переносимостью и конфигурацией, которые возникают у нас с другими аспектами приложений Java / RDBMS.И если полностью исключить типы datetime, вы бы столкнулись с множеством других проблем;см. выше.