2016-04-06 4 views
0

Having Code:SimpleDateFormat Bug oder Missverständnis Muster und nachsichtig?

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MMM d HH:mm yyyy"); 

Dies wird wie erwartet mit:

simpleDateFormat.parse("Mar 27 02:02 2016"); 
simpleDateFormat.parse("Mar 27 03:02 2016"); 

jedoch simpleDateFormat.setLenient(false);

die Parse machen ("27. März 2016 02.02") scheitern. Das macht mich total verwirrt - Was ich sehen kann, ist das SDF-Format-Muster richtig? Es sollte also keine Rolle spielen, wenn Nachsicht eingestellt wurde. Außerdem habe ich eine Menge anderer zufälliger (tausender) Datenstrings im selben Format ausprobiert und es ist nur "Datum vom 27. März 02.02.2016", das scheitert -. Was geht hier vor sich? Beachten Sie, dass das Gebietsschema sv_SE ist, wenn dies wichtig ist und die Zeitzone "Europa/Stockholm" ist (und "useDaylight" für den erstellten Kalender ist "true").

+1

in einem Locale Sind Sie getestet, die Sommerzeit (auch bekannt als Sommerzeit) am Sonntag, dem 27. März 2016 beginnen musste? – rgettman

+0

Ah, ja, eigentlich bin ich - warum würde es dann scheitern lassen? – Beamie

+1

Wo ich in den Vereinigten Staaten bin, wenn die Sommerzeit wirksam wird, gehen wir direkt von 1:59:59 bis 3:00:00. Die 2:00 Stunde hat nie existiert. Nachsichtigkeit für "SimpleDateFormat" bedeutet, Dinge wie den 31. April in den 1. Mai und den 31. April in den 2. Mai zu verwandeln. – rgettman

Antwort

0

Ich habe, wie unten und es funktionierte gut für mich

Locale locale = new Locale("sv", "SE"); 
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MMM d HH:mm yyyy", locale); 
simpleDateFormat.setLenient(false); 
Date pDate = simpleDateFormat.parse("Mar 27 02:02 2016"); 
//simpleDateFormat.parse("Mar 27 03:02 2016"); 
System.out.println(pDate); 
+0

Entschuldigung, ich habe wichtige Informationen in der Abfrage verpasst und habe sie jetzt aktualisiert, siehe Abfrage für Zeitzone. – Beamie

+0

und versuchen Sie es damit, dann sollte es auch für Sie reproduzierbar sein. – Beamie

+0

Ja, könnte nach der Einstellung der Zeitzone, die auf die Sommerzeit zurückzuführen ist, reproduzieren. Wenn Sie den milden Wert als wahr setzen, wird die Prüfung nicht ausgeführt. –

Verwandte Themen