2013-05-06 3 views
1

je l'horodatage suivant stocké en tant que chaîne que je voudrais analyser à l'aide SimpleDateFormat mais je vais avoir quelques problèmes avec la conversion:Parsing date de chaîne

Mon TimeStamp que je lis depuis un fichier xml: Tue Dec 31 09:29:08 PDT 2013

mon code:

String timeStamp = innerNode.getTextContent(); //innerNode is a Node object that contains my TimeStamp from an xml file. 
System.out.println(timeStamp); 
SimpleDateFormat dateFormat = new SimpleDateFormat("E MMM dd HH:mm:ss z yyyy"); 
dateFormat.setTimeZone(TimeZone.getTimeZone("PDT")); 
dateFormat.parse(timeStamp); 

Date firstParsedDate = dateFormat.parse(timeStamp); 
System.out.println(firstParsedDate); 

Alors qui fonctionne très bien, mais mon résultat est étrange. Au lieu d'imprimer Tue Dec 31 09:29:08 PDT 2013 mon résultat est à la place: Tue Dec 31 11:29:08 CDT 2013

Des idées quel est le problème? Merci.

Répondre

2

Date.toString n'utilisera pas le fuseau horaire que vous avez saisi pour le SimpleDateFormat qui l'a créé. Au lieu de cela, vous devriez faire:

System.out.println(dateFormat.format(firstParsedDate)); 

Ceci devrait utiliser le bon fuseau horaire que vous avez défini sur le formateur. toString utilise simplement le fuseau horaire du système. Un objet date de java utilisera le fuseau horaire du système.

+0

Merci beaucoup! Informations très pratiques à connaître. – DashControl

+1

Bien sûr. Notez que le temps que vous avez obtenu est toujours correct (9h29 PDT est le même que 11h29 CDT). Donc votre analyseur fonctionne. Notez également que vous n'avez pas besoin de définir le fuseau horaire pour l'analyser. Puisque vous avez utilisé un 'z' dans votre chaîne de format, il peut le comprendre quand il l'analyse. Dans votre cas, le fuseau horaire est juste pour l'impression. – Brian

1

Votre système est dans le fuseau horaire CDT et non dans PDT. La date est donc imprimée en CDT.