Maison >Java >javaDidacticiel >Comment gérer le 'caractère de modèle illégal 'T'' lors de l'analyse des dates en Java ?

Comment gérer le 'caractère de modèle illégal 'T'' lors de l'analyse des dates en Java ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-08 00:27:10971parcourir

How to Handle

Analyse des chaînes de date avec un caractère illégal

Lorsque vous essayez d'analyser une chaîne de date en Java à l'aide de SimpleDateFormat, vous pouvez rencontrer l'exception "Modèle illégal caractère 'T'". Ce problème survient lorsque la chaîne de date contient un caractère « T », qui désigne la composante temporelle lorsque l'on suit la norme ISO 8601.

Cause de l'exception

Le SimpleDateFormat La classe interprète « T » comme un caractère spécial qui sépare les parties date et heure de la chaîne. Cependant, le modèle par défaut n'inclut pas « T » comme caractère, ce qui conduit à l'exception.

Solutions possibles

Il existe plusieurs façons de résoudre ce problème :

  1. Modifier le Modèle :

    • Ajoutez un guillemet simple des deux côtés du « T » dans la chaîne du motif. Cela échappe au caractère, lui permettant d'être interprété comme un littéral.
    • Exemple : SimpleDateFormat sdf = new SimpleDateFormat("aaaa-MM-jj'T'hh:mm:ssZ")
  2. Utiliser DateTimeFormatter (Java 8 ):

    • Commencez à utiliser la classe DateTimeFormatter moderne introduite dans Java 8.
    • Créez un formateur avec la date et l'heure appropriées modèles.
    • Exemple :

       DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssZ");
       Date date = formatter.parse("2010-10-02T12:23:23Z", LocalDateTime::from);
  3. Séparation manuelle des chaînes :

    • Si les approches ci-dessus ne fonctionnent pas, envisagez de diviser la chaîne de date manuellement et d'analyser les composants de date et d'heure. séparément.

Remarque :

Si la chaîne de date contient un « Z » final pour indiquer l'heure UTC, assurez-vous que le « La partie XXX' du modèle est incluse.

Exemple de code amélioré (avec échappement 'T'):

public static void main(String[] args) {
    String date = "2010-10-02T12:23:23Z";
    String pattern = "yyyy-MM-dd'T'hh:mm:ssXXX";
    SimpleDateFormat sdf = new SimpleDateFormat(pattern);
    try {
        Date d = sdf.parse(date);
        System.out.println(d.getYear());
    } catch (ParseException e) {
        e.printStackTrace();
    }
}

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