Java: Что / где являются максимальными и минимальными значениями григорианкалендара?
-
25-09-2019 - |
Вопрос
Каковы максимальные и минимальные значения Gregoriancalendar?
Они в постоянной как integer.max_value, или, может быть, Gregoriancalendar.get (BLAH)?
В двух словах, как я могу создать экземпляр Gregoriancalendar с Min / Max Value?
Решение
Это должно работать:
GregorianCalendar maxgc = new GregorianCalendar();
maxgc.setTime(new Date(Long.MAX_VALUE));
GregorianCalendar mingc = new GregorianCalendar();
mingc.setTime(new Date(Long.MIN_VALUE));
Другие советы
Я взял предложение Джокутнера и провел его с:
GregorianCalendar gCal = new GregorianCalendar( );
gCal.setTime(new Date(Long.MIN_VALUE));
System.out.println( "Min Date is " + gCal.getTime() + " " + gCal.get(Calendar.ERA));
gCal.set( Calendar.SECOND, 3 );
System.out.println( "Min Date less 1 second is " + gCal.getTime() + " " + gCal.get(Calendar.ERA));
gCal.setTime(new Date(Long.MAX_VALUE));
System.out.println( "Max Date is " + gCal.getTime() + " " + gCal.get(Calendar.ERA));
Min Date is Sun Dec 02 16:47:04 GMT 292269055 0
Min Date less 1 second is Sun Aug 17 07:12:54 GMT 292278994 1
Max Date is Sun Aug 17 07:12:55 GMT 292278994 1
Что показывает минимальный и максимальный, и между ними индикация того, что произойдет, если вы пытаетесь перейти к второму до минимума - вы охватываете.
Это была версия 1.6.0_17.
Вы можете попробовать позвонить Календарь .getminimum () Для каждого типа поля (т. Е. Год, месяц и т. Д.) А затем установите эти минимальные значения на соответствующих типах поля. Это даст вам минимальный календарь. Я не знаю, есть ли более быстрый способ сделать это.
Другие ответы могут быть правильными, но используют устаревшие классы.
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. проект. Видеть Руководство.
На мгновение на временной шкале в универсальное глобальное время с разрешением наносекунды, использовать Instant
. Отказ Данный АН Offset-from-UTC, использовать OffsetDateTime
. Отказ Для часовой пояс (Смещение + правила для аномалий), используйте ZonedDateTime
, но по своей природе не определена мин / макс, ни делает ZoneId
. Отказ Для значения только даты без времени и без часового пояса, используйте LocalDate
. Отказ На протяжении времени только ценность времени без даты и без часового пояса используйте LocalTime
. Отказ На дату время без часового пояса, используйте LocalDateTime
.
Ниже приведены все заранее определенные константы.
Instant.MIN
=-1000000000-01-01T00:00Z
Instant.MAX
=1000000000-12-31T23:59:59.999999999Z
OffsetDateTime.MIN
=-999999999-01-01T00:00:00+18:00
OffsetDateTime.MAX
=+999999999-12-31T23:59:59.999999999-18:00
LocalDate.MIN
=-999999999-01-01
LocalDate.MAX
=+999999999-12-31
LocalTime.MIN
=00:00
LocalTime.MAX
=23:59:59.999999999
LocalDateTime.MIN
=-999999999-01-01T00:00:00
LocalDateTime.MAX
=+999999999-12-31T23:59:59.999999999
Year.MIN_VALUE
=-999,999,999
Year.MAX_VALUE
=+999,999,999
ZoneOffset.MIN
=-18:00
(но-12:00
на практике)ZoneOffset.MAX
=+18:00
(но+14:00
на практике)
Осторожность: Будьте осторожны с использованием этих ценностей как какой-то флаг или особое значение. Многие другие программные библиотеки и базы данных могут не поддерживать эти экстремальные значения.
Для флага или особого значения, такого как ненулью «Нет доступных доступных», я предлагаю выбирать произвольный момент, но избегайте перехода на такие экстремальные достижения либо назад, либо вперед во времени. Возможно Ссылка на эпоху Unix, Первый момент 1970 года в UTC, 1970-01-01T00: 00: 00z. Определяется как константу в Java: Instant.epoch
О Java.Time.
То Java.Time. Рамки встроены в Java 8, а затем. Эти классы вытесняют проблему старого наследие Классы даты времени, такие как java.util.Date
, Calendar
, & SimpleDateFormat
.
То Joda-Time Проект, сейчас в Режим технического обслуживания, советует миграцию к Java.Time. классы.
Чтобы узнать больше, см. Учебник Oracle. Отказ И поиск стека переполнения для многих примеров и пояснений. Спецификация JSR 310..
Вы можете обменять Java.Time. Объекты напрямую с вашей базой данных. Использовать JDBC драйвер совместимый с JDBC 4.2 или позже. Нет необходимости в струнах, нет необходимости в java.sql.*
классы.
Где получить классы Java.Time?
- Java SE 8., Java SE 9., Java SE 10., и позже
- Встроенный.
- Часть стандартного Java API с подключенной реализацией.
- Java 9 добавляет некоторые незначительные функции и исправления.
- Java SE 6. а также Java SE 7.
- Большая часть функциональности Java.Time возвращается в Java 6 & 7 в Threeten-Backport..
- Андроид
- Позже версии Android Bundle Aflations Java.Time. классы.
- Для ранее Android (<26), Threetenabp. Адапты проекта Threeten-Backport. (упомянутый выше). Видеть Как использовать THRETENABP ....
То Threeten-Extra Проект расширяет Java.Time с дополнительными классами. Этот проект является доказательством для возможных будущих дополнений в Java.Time. Вы можете найти несколько полезных классов, таких как Interval
, YearWeek
, YearQuarter
, а также более.