Pregunta

¿Cuáles son los valores máximo y mínimo de una GregorianCalendar?

¿Se encuentran en una constante como Integer.MAX_VALUE, o tal vez GregorianCalendar.get (BLA)?

En pocas palabras, ¿cómo puedo crear una instancia GregorianCalendar con valor min / max?

¿Fue útil?

Solución

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));

Otros consejos

Me tomó la sugerencia de joekutner y corrió 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 máximo, y entre ellas una indicación de lo que ocurre si se intenta pasar a la segunda antes del día mínimo -. Que se coloca alrededor

Esta fue la versión 1.6.0_17.


Puede intentar llamar Calendar.getMinimum () para cada tipo de campo (es decir, años, meses, etc.) y a continuación, establecer los valores mínimos en los tipos de campo correspondiente. Esto le daría el calendario mínimo. No sé si hay una manera más rápida de hacerlo.

Las otras respuestas pueden ser correctas pero el uso de clases anticuadas.

java.time

Las clases de edad de fecha y hora (java.util.Date/.Calendar etc.) han sido suplantada por la java.time marco integrado en Java 8 y versiones posteriores.

Las clases java.time están inspirados en Joda-Time , definido por JSR 310 , extendida por el proyecto ThreeTen-extra, de back-portado a Java 6 & 7 por el href="http://www.threeten.org/threetenbp/" rel="nofollow noreferrer"> ThreeTen-Backport proyecto , y adaptado para Android en el proyecto ThreeTenABP . Ver Tutorial .

En un momento en la línea de tiempo en UTC con una resolución de nanosegundos , el uso Instant . Dado un offset-de-UTC , el uso OffsetDateTime . Para una tiempo zona (offset + reglas para anomalías), el uso ZonedDateTime , pero por su naturaleza no ha definido min / max, ni ZoneId . Para un valor de fecha de sólo sin tiempo de día y sin zona de tiempo, el uso LocalDate . Para un único valor de tiempo de días sin fecha y sin zona de tiempo, el uso LocalTime . Para la fecha-hora sin zona horaria, utilice LocalDateTime .

Los siguientes son todas las constantes predefinidas.

  • Instant.MIN = -1000000000-01-01T00:00Z turismo Els href="http://docs.oracle.com/javase/8/docs/api/java/time/Instant.html#MAX" rel="nofollow noreferrer"> Instant.MAX = 1000000000-12-31T23:59:59.999999999Z
  • OffsetDateTime.MIN = -999999999-01-01T00:00:00+18:00 turismo Els href="http://docs.oracle.com/javase/8/docs/api/java/time/OffsetDateTime.html#MAX" rel="nofollow noreferrer"> OffsetDateTime.MAX = +999999999-12-31T23:59:59.999999999-18:00
  • LocalDate.MIN = -999999999-01-01 turismo Els href="http://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html#MAX" rel="nofollow noreferrer"> LocalDate.MAX = +999999999-12-31
  • LocalTime.MIN = 00:00 turismo Els href="http://docs.oracle.com/javase/8/docs/api/java/time/LocalTime.html#MAX" rel="nofollow noreferrer"> LocalTime.MAX = 23:59:59.999999999
  • LocalDateTime.MIN = -999999999-01-01T00:00:00 turismo Els href="http://docs.oracle.com/javase/8/docs/api/java/time/LocalDateTime.html#MAX" rel="nofollow noreferrer"> LocalDateTime.MAX = +999999999-12-31T23:59:59.999999999
  • Year.MIN_VALUE = -999,999,999 turismo Els href="http://docs.oracle.com/javase/8/docs/api/java/time/Year.html#MAX_VALUE" rel="nofollow noreferrer"> Year.MAX_VALUE = +999,999,999
  • ZoneOffset.MIN = -18:00 (pero -12:00 en la práctica) turismo Els href="http://docs.oracle.com/javase/8/docs/api/java/time/ZoneOffset.html#MAX" rel="nofollow noreferrer"> ZoneOffset.MAX = +18:00 (pero +14:00 en la práctica)

Atención: Tenga cuidado con el uso de estos valores como una especie de bandera o un significado especial. Muchas otras bibliotecas de software y bases de datos pueden no soportar estos valores extremos.

Para una bandera o un significado especial, como un no nulo "ningún valor disponible", sugiero escoger un momento arbitrario, sino evitar ir a tales extremos confines ya sea hacia adelante o hacia atrás en el tiempo. Tal vez el Unix referencia época fecha , el primer momento de 1970 en UTC, 1970-01-01T00: 00: 00Z. Se define como una constante en Java: Instant.EPOCH


Acerca de java.time

El java.time marco está incorporado en Java 8 y versiones posteriores. Estas clases suplantar a la problemática de edad legado clases de fecha y hora como java.util.Date , Calendar , y SimpleDateFormat .

El Joda-Time proyecto, ahora en < a href = "https://en.wikipedia.org/wiki/Maintenance_mode" rel = "noreferrer nofollow"> el modo de mantenimiento , aconseja migración a la java.time clases .

Para obtener más información, consulte la Oracle Tutorial . Y la búsqueda de desbordamiento de pila durante muchos ejemplos y explicaciones. Especificación es JSR 310 .

Se puede intercambiar java.time objetos directamente con su base de datos. controlador Utilice un JDBC compatible con JDBC 4.2 o posterior. No hay necesidad de cadenas, sin necesidad de clases java.sql.*.

¿Dónde obtener las clases java.time?

El ThreeTen-Extra Proyecto extiende java.time con clases adicionales. Este proyecto es un campo de pruebas para posibles futuras adiciones a java.time. Usted puede encontrar algunas clases útiles aquí, como Interval , YearWeek , YearQuarter , y más .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top