Другие ответы могут быть правильными, но использовать устаревшие классы.
java.time
Старые классы даты и времени (java.util.Date/.Calendar и т. Д.) Были вытеснены фреймворком java.time , встроенным вЯва 8 и позже.
Классы java.time основаны на Joda-Time , определяемом JSR 310 , расширенном проектом ThreeTen-Extra, перенесенным на Java 6 &7 проектом ThreeTen-Backport и адаптирован для Android в проекте ThreeTenABP .См. Учебное пособие .
. На мгновение на временной шкале в UTC с разрешением наносекунд , используйте Instant
.Учитывая смещение от UTC , используйте OffsetDateTime
.Для часового пояса (смещение + правила для аномалий) используйте ZonedDateTime
, но по своей природе не имеет определенного минимума, а также ZoneId
.Для значения только для даты без времени суток и без часового пояса используйте LocalDate
.Для значения только для времени суток без даты и без часового пояса используйте LocalTime
.Для даты и времени без часового пояса используйте LocalDateTime
.
Внимание: Остерегайтесь использования этих значений в качестве какого-либо флага или специального значения.Многие другие программные библиотеки и базы данных могут не поддерживать эти крайние значения.
Для флага или специального значения, такого как ненулевое «значение не доступно», я предлагаю выбрать произвольный момент, но избегайте таких экстремальных пределов либо назад, либо вперед во времени.Возможно, справочная дата Unix , первый момент 1970 года в UTC, 1970-01-01T00: 00: 00Z.Определен как постоянный в Java: Instant.EPOCH