Java: Qu'est-ce que / où sont les valeurs maximales et minimales d'un GregorianCalendar?

StackOverflow https://stackoverflow.com/questions/2393016

Question

Quelles sont les valeurs maximales et minimales d'un GregorianCalendar?

Sont-ils dans une constante comme Integer.MAX_VALUE, ou peut-être GregorianCalendar.get (BLA)?

En un mot, comment puis-je créer une instance GregorianCalendar avec min / max valeur?

Était-ce utile?

La solution

Cela devrait fonctionner:

GregorianCalendar maxgc = new GregorianCalendar();
maxgc.setTime(new Date(Long.MAX_VALUE));

GregorianCalendar mingc = new GregorianCalendar();
mingc.setTime(new Date(Long.MIN_VALUE));

Autres conseils

Je l'ai pris la suggestion de joekutner et a couru avec:

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

Ce qui montre le minimum et le maximum, et entre eux une indication de ce qui se passe si vous essayez de passer à la seconde avant que le minimum -. Vous enrouler autour

est la version 1.6.0_17.


Vous pouvez essayer d'appeler Calendar.getMinimum () pour chaque type de champ (c.-à-année, mois, etc.), puis définissez les valeurs minimales sur les types de champs correspondants. Cela vous donne le calendrier minimum. Je ne sais pas s'il y a un moyen plus rapide de le faire.

Les autres réponses peuvent être correctes mais utiliser des classes démodées.

java.time

Les anciennes classes de date-heure (java.util.Date/.Calendar etc.) ont été supplanté par le java.time cadre construit en Java 8 et versions ultérieures.

Les classes java.time sont inspirés par Joda-Time , défini par JSR 310 , étendu par le projet ThreeTen-extra, back-Java 6 portage & 7 par le projet ThreeTen-Backport, et adapté pour Android dans le ThreeTenABP projet. Voir Tutorial .

Pour un instant sur la timeline dans UTC avec une résolution de nanosecondes , utilisez Instant . Compte tenu offset de-UTC , utilisez OffsetDateTime . Pour une de (offset + règles pour les anomalies), utilisez ZonedDateTime , mais par sa nature n'a pas défini min / max, ni ZoneId . Pour une valeur de date uniquement, sans temps de jour et sans fuseau horaire, utilisez LocalDate . Pour une seule valeur de temps de jour sans date et sans fuseau horaire, utilisez LocalTime . Pour date-heure sans fuseau horaire, utilisez LocalDateTime .

Les éléments suivants sont toutes les constantes prédéfinies.

Attention: Méfiez-vous d'utiliser ces valeurs comme une sorte de sens drapeau ou spécial. Beaucoup d'autres bibliothèques et bases de données logiciels ne supportent pas ces valeurs extrêmes.

Pour un drapeau ou une signification particulière comme une « aucune valeur disponible » non nulle, je vous suggère de choisir un moment arbitraire, mais éviter d'aller à ces tronçons extrêmes soit avant ou en arrière dans le temps. Peut-être le Date de référence époque Unix , le premier moment de 1970 à UTC, 1970-01-01T00: 00: 00Z. Défini comme une constante en Java: Instant.EPOCH


A propos de java.time

Le java.time cadre est construit en Java 8 et versions ultérieures. Ces classes supplantent les href="https://en.wikipedia.org/wiki/Legacy_system" gênants vieux les classes date-heure comme java.util.Date , Calendar , et SimpleDateFormat .

Le Joda-Time projet , maintenant < a href = "https://en.wikipedia.org/wiki/Maintenance_mode" rel = "nofollow noreferrer"> mode maintenance , conseille la migration vers la page noreferrer java.time classes .

Pour en savoir plus, consultez le Oracle Tutorial . Et la recherche Stack Overflow pour de nombreux exemples et explications. Spécification est JSR 310 .

Vous pouvez échanger des java.time objets directement avec votre base de données. Utilisez un pilote JDBC conforme JDBC 4.2 ou version ultérieure. Pas besoin de chaînes, pas besoin de classes java.sql.*.

Où obtenir les classes java.time?

Le projet ThreeTen-Extra étend java.time avec des classes supplémentaires. Ce projet est un terrain d'essai pour les futurs ajouts possibles à java.time. Vous trouverez peut-être des classes utiles ici, comme Interval , YearWeek , YearQuarter et plus .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top