Comment convertir une date grégorienne en date julienne avec l'API Java 8 Date/Heure?


J'ai une date dans le calendrier Grégorien et veulent regarder le même jour dans le calendrier Julien.

Cela devrait être facile avec l'API Date/Heure de Java 8 mais je n'ai pas trouvé de moyen de le faire. Le code devrait ressembler à ceci:

/*
 * LocalDate uses the Gregorian calendar
 */
LocalDate date = LocalDate.parse("2017-10-29");


/*
 * switch from Gregorian calendar to Julian calendar here
 */
;


/*
 * output should be 2017-10-16
 */
System.out.println(date);

, que Vous pouvez essayer en ligne ici


Modifier

Ce n'est certainement pas un double de Convertir du calendrier grégorien en calendrier julien . Ma question pose spécifiquement sur l'API Java Data/Time.

Author: Paule, 2017-10-29

2 answers

La chronologie julienne n'est pas intégrée dans Java 8 ou 9. Au lieu de cela, le projet ThreeTen-Extra a JulianChronology et JulianDate cours. Son utilisation est simple.

JulianDate jd = JulianDate.from(localIsoDate);
 5
Author: JodaStephen, 2017-10-29 21:49:19

Je pense plutôt comme @Hugo que vos efforts de recherche auraient pu être meilleurs.

Java-8/9 prend-il en charge le calendrier julien?

Méthode de recherche: Veuillez étudier l'API officielle.

Le nombre de chronologies dans OpenJDK est limité à seulementcinq (voir les implémentations mentionnées). Aucune chronologie (ISO comme proleptique grégorien, Hijri-Umalquara, Minguo, ThaiBuddhist, Japonais) ne supporte le calendrier julien. D'où la réponse simple est: Pas depossibilité de convertir en calendrier julien uniquement en utilisant Java-8/9-API.

Oracle prévoit-il de mettre en œuvre le calendrier julien?

Méthode de recherche: Requête Google.

Une simple recherche en utilisant Google avec les mots-clés "openjdk calendrier julien" montre comme premier lien problème suivant:

Le système de calendrier julien était le principal système de calendrier utilisé avant l'actuel grégorien / ISO. En raison de sa répandu utilisation historique, en particulier dans le domaine historique / académique, le JDK doit être pris en charge.

Une implémentation est disponible sur ThreeTen-Extra. Notez que cette le problème n'appelle-t-il pas un calendrier qui peut "basculer" entre le Julien et Grégorien.

Ce problème a été soumis par l'auteur principal de new java.temps-API S. Colebourne déjà dans l'année 2015. Oracle avait eu beaucoup de temps pour ajouter l'implémentation finie suggérée à Java-9, mais raté. En ce qui concerne le fait qu'Oracle a refusé certains autres systèmes de calendrier (comme le persan ou l'hébreu) ou même jeté les chronologies existantes (comme Coptic qui faisait partie d'OpenJDK-8 avant sa sortie), Je ne serais pas très sûr si Oracle va vraiment ajouter le calendrier julien à une version Java ultérieure dans le contexte de java.time-API. Voyons voir.

Pouvons-nous utiliser d'autres bibliothèques tierces pour convertir java.time.LocalDate?

méthode de Recherche: Google requête.

Une simple recherche à l'aide de Google avec les mots-clés "java julian calendar" montre des tonnes de solutions possibles. Ayez juste un peu de patience pour étudier au moins les liens des 10 premières pages de résultats de recherche:

Oui, on peut.

  • Si vous voulez ou savez comment convertir java.time.LocalDate en java.util.GregorianCalendar (astuce: Utilisez le fuseau horaire pour convertir d'abord en ZonedDateTimepuis en ancienne API): Définissez la date de transition grégorienne sur new Date(Long.MAX_VALUE).

  • Ou utilisez Joda-Time: Il offre une chronologie julian . Exemple de conversion:

LocalDate threeten = LocalDate.now();
org.joda.time.LocalDate joda =
  new DateTime(
      threeten.getYear(),
      threeten.getMonthValue(),
      threeten.getDayOfMonth(),
      0,
      0
  ).withChronology(JulianChronology.getInstance()).toLocalDate();
LocalDate threeten = LocalDate.now();
JulianCalendar jcal = PlainDate.from(threeten).transform(JulianCalendar.axis());
 1
Author: Meno Hochschild, 2017-10-30 15:37:12