meses - manejo de horas en java
Java: ¿Cuáles/dónde son los valores máximo y mínimo de un Calendario Gregorian? (4)
Esto debería funcionar:
GregorianCalendar maxgc = new GregorianCalendar();
maxgc.setTime(new Date(Long.MAX_VALUE));
GregorianCalendar mingc = new GregorianCalendar();
mingc.setTime(new Date(Long.MIN_VALUE));
¿Cuáles son los valores máximos y mínimos de un calendario Gregorian?
¿Están en una constante como Integer.MAX_VALUE, o tal vez GregorianCalendar.get (BLAH)?
En pocas palabras, ¿cómo puedo crear una instancia de GregorianCalendar con valor mínimo / máximo?
Las otras respuestas pueden ser correctas pero usan clases pasadas de moda.
java.time
Las antiguas clases de fecha y hora (java.util.Date/.Calendar, etc.) han sido suplantadas por el marco java.time integrado en Java 8 y posterior.
Las clases java.time están inspiradas en Joda-Time , definido por JSR 310 , extendido por el proyecto ThreeTen-Extra, respaldado por Java a Java 6 y 7 por el proyecto ThreeTen-Backport , y adaptado a Android en el proyecto ThreeTenABP . Ver Tutorial .
Por un momento en la línea de tiempo en UTC con una resolución de nanosegundos , use Instant
. Dado un desplazamiento desde UTC , use OffsetDateTime
. Para una zona horaria (desplazamiento + reglas para anomalías), use ZonedDateTime
, pero por su naturaleza no tiene definido min / max, ni ZoneId
. Para un valor de solo fecha sin hora del día y sin zona horaria, use LocalDate
. Para un valor solo de tiempo del día sin fecha y sin zona horaria, use LocalTime
. Para fecha-hora sin zona horaria, use LocalDateTime
.
Las siguientes son todas constantes predefinidas.
-
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
(pero-12:00
en la práctica)
ZoneOffset.MAX
=+18:00
(pero+14:00
en la práctica)
Puede intentar llamar a Calendar.getMinimum () para cada tipo de campo (es decir, año, mes, etc.) y luego establecer esos valores mínimos en los tipos de campo correspondientes. Esto te daría el calendario mínimo. No sé si hay una forma más rápida de hacerlo.
Tomé la sugerencia de joekutner y la ejecuté con:
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
Que muestra el mínimo y el máximo, y entre ellos una indicación de lo que sucede si tratas de pasar al segundo antes que el mínimo: te envuelves.
Esta era la versión 1.6.0_17.