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?
Bah, les dates sont *** un mal de tête * ** Je suis curieux de connaître la réponse à cette question. –