Maison  >  Article  >  Java  >  Pourquoi Java SimpleDateFormat convertit-il les dates AD en janvier (aaaa/MM/JJ vs aaaa/MM/jj) ?

Pourquoi Java SimpleDateFormat convertit-il les dates AD en janvier (aaaa/MM/JJ vs aaaa/MM/jj) ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-24 07:50:29949parcourir

Why Does Java SimpleDateFormat Convert AD Dates to January (yyyy/MM/DD vs yyyy/MM/dd)?

Énigme Java SimpleDateFormat : tous les mois par défaut sont janvier

Lors de l'analyse des dates d'Active Directory à l'aide de SimpleDateFormat de Java, un problème déroutant se pose : chaque la date est convertie par erreur en janvier. Intrigué par cette divergence, examinons un extrait de code qui illustre le problème :

<code class="java">private Date getParsedDate(String givenString) {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/DD");
    try {
        return sdf.parse(formattedString);
    } catch (ParseException ex) {
        ex.printStackTrace();
    }
    return null;
}</code>

lors de l'exécution de ce code avec la valeur de date AD "20050912190509.0Z", nous obtenons le résultat inattendu :

Value from AD is: 20050912190509.0Z
Formatted String is: 2005/09/12
Final date string is: Wed Jan 12 00:00:00 EST 2005

Bien que le jour et l'année soient identifiés avec précision, le mois est constamment confondu avec janvier. Quel secret se cache dans ce code apparemment simple qui conduit à cette erreur flagrante ?

La réponse réside dans un oubli subtil dans la chaîne de modèle SimpleDateFormat. En précisant « aaaa/MM/JJ », nous forçons par inadvertance le format du mois à être en lettres majuscules « MM ». Cependant, la valeur de date d'Active Directory utilise un « mm » minuscule pour les mois.

Pour résoudre ce problème, nous ajustons simplement la chaîne de modèle à « aaaa/MM/jj » avec un « jj » minuscule pour les jours :

<code class="java">SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");</code>

En apportant cette modification mineure, SimpleDateFormat interprète correctement les dates d'Active Directory, rendant la chaîne de date finale avec le mois correct :

Value from AD is: 20050912190509.0Z
Formatted String is: 2005/09/12
Final date string is: Wed Sep 12 00:00:00 EST 2005

Cette correction garantit que SimpleDateFormat de Java analyse avec précision dates d'Active Directory, vous permettant de travailler en toute confiance avec des données historiques ou de créer des rapports basés sur des plages de dates spécifiques.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn