Date minimum en Java

Quelle est la date minimum en Java?

N’oubliez pas que le constructeur Date accepte volontiers les valeurs négatives.

Date date = new Date(Long.MIN_VALUE); 

résultats

Dim déc 02 22:47:04 BDT 292269055

Je suppose que c’est à peu près l’heure des dinosaures Big Bang 🙂

MODIFIER

Comme Martin Clayton a répondu, vous pouvez utiliser la classe Calendar pour vérifier l’ère. Cela va sortir 0 pour BCE:

 Calendar calendar = Calendar.getInstance(); calendar.setTime(new Date(Long.MIN_VALUE)); System.out.println(calendar.get(Calendar.ERA)); 

Si vous parlez de java.util.Date comme horodatage, vous pouvez le faire

Date d = new Date(0L) et vous verrez que cela représente le jeu. Jan 01 01:00:00 GMT 1970


Comme Tulskiy l’ a souligné, il est possible de transmettre une valeur négative au constructeur Date. Si nous faisons cela et utilisons un format de date qui comprend l’ère, nous pouvons voir:

 Date d = new Date(Long.MIN_VALUE); DateFormat df = new SimpleDateFormat("EEE, d MMM yyyy G HH:mm:ss Z"); System.out.println(df.format(d)); 

affiche: dim, 2 déc 292269055 BC 16:47:04 +0000

Les autres réponses peuvent être correctes, mais utilisez des classes obsolètes.

java.time

Les anciennes classes date-heure (java.util.Date/.Calendar etc.) ont été supplantées par le framework java.time intégré à Java 8 et versions ultérieures.

Les classes java.time sont inspirées de Joda-Time , défini par JSR 310 , étendu par le projet ThreeTen-Extra, porté en Java 6 et 7 par le projet ThreeTen-Backport , et adapté à Android dans le projet ThreeTenABP . Voir le tutoriel .

Pendant un instant sur la timeline en UTC avec une résolution de nanosecondes , utilisez Instant . Avec un offset-from-UTC , utilisez OffsetDateTime . Pour un fuseau horaire (offset + règles pour les anomalies), utilisez ZonedDateTime , mais par nature n’a pas de minimum défini, ZoneId non ZoneId . Pour une valeur de date uniquement sans heure et sans fuseau horaire, utilisez LocalDate . Pour une valeur d’heure uniquement sans date et sans fuseau horaire, utilisez LocalTime . Pour la date-heure sans fuseau horaire, utilisez LocalDateTime .

  • Instant.MIN = -1000000000-01-01T00:00Z
  • OffsetDateTime.MIN = -999999999-01-01T00:00:00+18:00
  • LocalDate.MIN = -999999999-01-01
  • LocalTime.MIN = 00:00
  • LocalDateTime.MIN = -999999999-01-01T00:00:00
  • Year.MIN_VALUE = -999,999,999
  • ZoneOffset.MIN = -18:00 (mais -12:00 en pratique)

Attention: Méfiez-vous de ces valeurs en tant que drapeau ou signification spéciale. De nombreuses autres bibliothèques de logiciels et bases de données peuvent ne pas prendre en charge ces valeurs extrêmes.

Pour un drapeau ou une signification spéciale telle qu’une valeur sans valeur nulle, je suggère de choisir un moment arbitraire, mais évite d’aller à une telle distance, que ce soit en arrière ou en avant. Peut-être la date de référence de l’époque Unix , le premier moment de 1970 en UTC, 1970-01-01T00: 00: 00Z. Défini comme une constante en Java: Instant.EPOCH

C’est la même chose que pour les classes de calendrier.

Essaye ça:

 Date d = new Date( Long.MIN_VALUE ); System.out.println( d ); 

Tu verras:

 Sun Dec 02 16:47:04 GMT 292269055 

Mais le format de date par défaut n’inclut pas l’ère – qui est BCE pour cette date.

Puisque Date est marqué comme obsolète , j’ai pensé qu’il devrait y avoir une autre façon de contourner ce problème, alors j’ai examiné certaines des méthodes, et j’ai trouvé cette façon

Vous pouvez aussi utiliser Long.MIN_VALUE, au moment où j’ai écrit ceci, je ne l’avais pas cherché, et même / donc je ne m’en suis pas souvenu. entrer la description de l'image ici