2010-03-06 6 views

Répondre

6

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

Malheureusement votre la solution ne fonctionne pas. Après mingc.setTime (new Date (Long.MIN_VALUE)), vous obtenez: migc.get (Calendar.YEAR) == 292269055 ou sth comme ceci. Cela ne me semble pas minime :-). – pajton

+1

Merci = D Je n'utilise que ces valeurs pour la comparaison, donc je vais bien, mais pour d'autres cela peut être digne de mention. À partir de setTime() documentation: Remarque: L'appel de setTime() avec Date (Long.MAX_VALUE) ou Date (Long.MIN_VALUE) peut générer des valeurs de champ incorrectes à partir de get(). – WaelJ

+3

pajton, vérifier: migc.get(Calendar.ERA) 0 signifie BC 1 signifie AD Donc année 292.269.055 correspond à 292.269.055 BC – WaelJ

4

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

5

Je pris la suggestion de joekutner et il 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 le minimum - vous envelopper.

C'était la version 1.6.0_17.

+0

Wow c'est intéressant – WaelJ

0

Les autres Réponses peuvent être correctes mais utiliser des classes obsolètes.

java.time

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

Les classes java.time sont inspirées par Joda-Time, définie par JSR 310, prolongé par le projet ThreeTen-Extra, back-porté à Java 6 7 & par le projet ThreeTen-Backport, et adapté à Android dans le projet ThreeTenABP. Voir Tutorial.

Pour un moment sur la ligne de temps en UTC avec une résolution de nanoseconds, utilisez Instant. Étant donné un offset-from-UTC, utilisez OffsetDateTime. Pour un time zone (décalage + 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 heure et sans fuseau horaire, utilisez LocalDate. Pour une valeur de l'heure de la journée sans date et sans fuseau horaire, utilisez LocalTime. Pour la date et l'heure sans fuseau horaire, utilisez LocalDateTime.

Toutes les constantes prédéfinies sont les suivantes.

Questions connexes