202 votes

Caractère de modèle illégal 'T' lors de l'analyse d'une chaîne de date en java.Date

J'ai une chaîne de date et je veux l’analyser à la date normale en utilisant l’API java Date, voici mon code:

 public static void main(String[] args) {
    String date="2010-10-02T12:23:23Z";
    String pattern="yyyy-MM-ddThh:mm:ssZ";
    SimpleDateFormat sdf=new SimpleDateFormat(pattern);
    try {
        Date d=sdf.parse(date);
        System.out.println(d.getYear());
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
 

Cependant, j'ai une exception: java.lang.IllegalArgumentException: Illegal pattern character 'T'

Je me demande donc si je dois séparer la chaîne et l’analyser manuellement?

BTW, j'ai essayé d'ajouter un seul caractère de citation de chaque côté du T:

 String pattern="yyyy-MM-dd'T'hh:mm:ssZ";
 

Cela ne marche pas non plus.

221voto

Jarrod Roberson Points 32263

Cela fonctionne, notez les guillemets simples autour de l' T et que j'ai enlevé l' Z à partir de la date et le motif, puisque vous ne disposez pas d'un décalage horaire dans votre exemple, c'est pourquoi il est défaillant.

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

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

    }
}

et voici ce qu'il sortie

Sat Oct 02 00:23:23 EDT 2010

Si vraiment vous avez des informations sur le fuseau horaire de votre date, vous devez utiliser le bon Z/z, mais votre date réelle de Z dans le il pas décalage horaire. Comme suit:

final String date = "2010-10-02T12:23:23+0500";
final String pattern = "yyyy-MM-dd'T'hh:mm:ssZ";

et voici ce que j'obtiens en sortie avec EST/+0500 que mon fuseau horaire

Fri Oct 01 15:23:23 EDT 2010

27voto

Basil Bourque Points 8938

Ce format est défini par la norme ISO 8601 standard pour la date-heure de formats de chaîne.

Le Joda-Time library et la java.en temps les deux utiliser le format ISO 8601 formats par défaut à la fois pour l'analyse et la génération de chaînes.

Il est généralement préférable d'éviter l'utilisation de java.util.La Date et l' .Calendrier des classes comme ils sont très gênants. Mais si nécessaire, vous pouvez convertir en avant et en arrière.

Joda-Time

Voici un exemple de code dans Joda-Time 2.4.

java.util.Date date = new org.joda.time.DateTime( "2010-10-02T12:23:23Z" ).toDate();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X