Какое минимальное значение даты в Java?
Минимальная дата в Java
Ответ 1
Не забывайте, что конструктор Date с радостью принимает отрицательные значения.
Date date = new Date(Long.MIN_VALUE);
возвращает
Вс Дек 02 22:47:04 BDT 292269055
Я предполагаю, что о времени Big Bang динозавров:)
ИЗМЕНИТЬ
Как ответил martin clayton, вы можете использовать класс Calendar для проверки эры. Это будет выводить 0, что означает BCE:
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date(Long.MIN_VALUE));
System.out.println(calendar.get(Calendar.ERA));
Ответ 2
Если вы говорите о java.util.Date
как временную метку, вы можете сделать это
Date d = new Date(0L)
, и вы увидите, что это означает Thu Jan 01 01:00:00 GMT 1970
Как tulskiy указал, что можно передать отрицательное значение конструктору Date. Если мы это сделаем и используем формат даты, который включает в себя эпоху, мы можем видеть:
Date d = new Date(Long.MIN_VALUE);
DateFormat df = new SimpleDateFormat("EEE, d MMM yyyy G HH:mm:ss Z");
System.out.println(df.format(d));
отображает: вс, 2 дек. 292269055 до н.э. 16:47:04 +0000
Ответ 3
Другие ответы могут быть правильными, но использовать устаревшие классы.
java.time
Старые классы даты и времени (java.util.Date/.Calendar и т.д.) Были вытеснены платформой java.time, встроенной в Java 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
.
-
Instant.MIN
=Instant.MIN
-1000000000-01-01T00:00Z
-
OffsetDateTime.MIN
=-999999999-01-01T00:00:00+18:00
-
LocalDate.MIN
=-999999999-01-01
-
LocalTime.MIN
=00:00
-
LocalDateTime.MIN
=-999999999-01-01T00:00:00
-
Year.MIN_VALUE
=-999,999,999
-
ZoneOffset.MIN
=-18:00
(но-12:00
на практике)
Внимание: будьте осторожны при использовании этих значений в качестве своего рода флага или специального значения. Многие другие программные библиотеки и базы данных могут не поддерживать эти экстремальные значения.
Для флага или специального значения, такого как ненулевое "нет значения", я предлагаю выбрать произвольный момент, но избегаю перехода к таким крайним достижениям как назад, так и вперед во времени. Возможно, дата ссылки на эпоху Unix, первый момент 1970 года в UTC, 1970-01-01T00: 00: 00Z. Определяется как константа в Java: Instant.EPOCH
Ответ 4
То же, что и для классов Calendar.
Попробуйте следующее:
Date d = new Date( Long.MIN_VALUE );
System.out.println( d );
Вы увидите:
Sun Dec 02 16:47:04 GMT 292269055
Но формат даты по умолчанию не включает эру - BCE для этой даты.
Ответ 5
Так как Date
отмечен как устаревший, я думал, что должен быть другой способ обойти это, поэтому я посмотрел на некоторые из методов, и я нашел этот способ
Вы также можете использовать Long.MIN_VALUE, в то время, когда я это написал, я не искал его и даже/так я его не помнил.