2011-10-14 4 views
3

Hier, j'ai rencontré un problème où la date de naissance d'une personne a été modifiée après qu'elle a été rassemblée avec XStream de Date à xml, puis unmarshalled à Date à nouveau. Le code suivant reproduit le comportement étrange de XStream:Comportement incohérent pour SimpleDateFormat pour timezone Amsterdam

System.setProperty("user.timezone", "Europe/Amsterdam"); 
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S z"); 
String textIn = "1933-09-17 00:00:00.0 CET"; 
Date date = dateFormat.parse(textIn); 
String textOut = dateFormat.format(date); 

System.out.println("input : " + textIn); 
System.out.println("date : " + date); 
System.out.println("output: " + textOut); 

Les résultats:

input : 1933-09-17 00:00:00.0 CET 
date : Sun Sep 17 00:19:32 CEST 1933 
output: 1933-09-17 00:19:32.0 CEST 

Je trouve que cela ne se produit que pour les dates avant 1940. Ce qui est d'une certaine manière explicables: Aux Pays-Bas en 1940, il y avait un changement de l'Amsterdamse Tijd (GMT + 00h19m32s) à l'heure européenne (GMT + 01h00m00s). Je ne peux pas expliquer pourquoi le fuseau horaire change pour gagner du temps (de CET à CEST).

Si je change le fuseau horaire à Berlin

System.setProperty("user.timezone", "Europe/Berlin"); 

Je reçois les résultats que j'attendre:

input : 1933-09-17 00:00:00.0 CET 
date : Sun Sep 17 00:00:00 CET 1933 
output: 1933-09-17 00:00:00.0 CET 

Mon serveur est situé à Amsterdam. Je vais définir le fuseau horaire du serveur à Berlin, pour contourner le problème.

Ma question est: Pensez-vous qu'il s'agit d'un bug dans SimpleDateFormat? Ou le code est-il invalide parce que "1933-09-17 00: 00: 00.0 CET" est une date invalide pour l'emplacement Amsterdam?

S'il s'agit d'un bug, devrait et où devrait-il être signalé? Si l'entrée de date n'est pas valide en elle-même, la méthode d'analyse ne devrait-elle pas générer une erreur?

+1

Bah, les dates sont *** un mal de tête * ** Je suis curieux de connaître la réponse à cette question. –

Répondre

2

ressemble à l'Allemagne n'a pas fait le CET de transition CEST en 1933, alors que Pays-Bas a fait.

+0

Merci! La personne est née dans le fuseau horaire AMT, ou dans NST si l'heure d'été est active. Puis quelques années il y avait NET et NEST et jusqu'à présent nous avons CET et CEST. L'histoire n'est jamais simple. Espérons que le futur sera! – boes

Questions connexes