2014-05-08 21 views
7

Kann jemand erklären, warum ich diese Werte bekomme, während ich versuche, ein Datum zu analysieren? Ich habe drei verschiedene Eingänge versucht, wie folgt:Merkwürdiges Verhalten von ww SimpleDateFormat

1) Dritte Woche von 2013

Date date = new SimpleDateFormat("ww.yyyy").parse("02.2013"); 
Calendar cal = Calendar.getInstance(); 
cal.setTime(date); 
System.out.println(cal.get(Calendar.WEEK_OF_YEAR) + "." + cal.get(Calendar.YEAR)); 

Welche Ausgänge: 02.2013 (wie erwartet)

2) Die erste Woche des Jahres 2013

Welche Ausgänge: 52.2012 (was für mich in Ordnung ist, seit der ersten Woche von 2013 ist auch die letzte von 2012)

3) Zweite Woche von 2013

Date date = new SimpleDateFormat("ww.yyyy").parse("01.2013"); 
Calendar cal = Calendar.getInstance(); 
cal.setTime(date); 
System.out.println(cal.get(Calendar.WEEK_OF_YEAR) + "." + cal.get(Calendar.YEAR)); 

Welche Ausgänge: 1.2012 (das macht absolut kein Sinn für mich)

Weiß jemand, warum dies geschieht ?? Ich muss ein Datum im Format (Woche des Jahres) analysieren. (Jahr). Benutze ich das falsche Muster?

+1

Tipp: In Betracht ziehen, das Format der Wochentage so zu ändern, dass es dem durch den Standard [ISO 8601] (http://en.wikipedia.org/wiki/ISO_8601#Week_dates) definierten Format folgt. So: '2014-W19'. Die Bibliothek [Joda-Time] (http://www.joda.org/joda-time/) könnte Ihnen dann beim Analysieren und Erzeugen solcher Strings helfen, indem Sie ihre Formatierungen verwenden, die im [ISODateTimeFormat] (http: //www.joda. org/joda-Zeit/apidocs/org/joda/Zeit/Format/ISODateTimeFormat.html) Fabrik. –

Antwort

16

Sie verwenden ww, die "Woche der Woche" ist, aber dann yyyy, die "Kalenderjahr" statt "Woche Jahr" ist. Die Einstellung der Wochenwoche und die Einstellung des Kalenderjahres ist ein Rezept für Probleme, da es sich nur um separate Nummerierungssysteme handelt.

Sie sollten YYYY in Ihrer Formatzeichenfolge verwenden, um die Woche-Jahr anzugeben ... obwohl es unglücklicherweise aussieht, können Sie nicht den Wert auf vernünftige Weise erhalten. (Ich würde eine Konstante Calendar.WEEKYEAR erwarten, aber es gibt keine solche Sache.)

Auch Werte der Woche-des-Jahres beginnen bei 1, nicht 0 ... und keine Woche ist in zwei Woche-Jahren; es ist entweder die erste Woche von 2013 oder es ist die letzte Woche von 2012 ... es ist nicht beides.

Ich würde persönlich Wochenwochen und Wochen vermeiden, wenn Sie können - sie können sehr verwirrend sein, besonders wenn ein Datum in einem Kalenderjahr in einem anderen Kalenderjahr ist.

+2

Danke, jetzt erkenne ich den Grund, warum gibt es yyyy und YYYY – fvdalcin

+0

Das Problem (wie Sie erwähnten) ist, dass ich nicht den Wert der Woche-Jahr bekommen kann (und ich brauche es, ich bin nur die Zeichenfolge analysieren zu validieren es). Soll ich eine andere Frage stellen, um zu sehen, ob jemand weiß, wie ich es tun kann? – fvdalcin

+3

@fvdalcin: Ja, poste eine andere Frage - aber erkläre, was deine aktuelle Situation ist. Passt Ihre Vorstellung von "Wochen des Jahres" sogar zu dem, was "java.util.Calendar" tut?Vielleicht möchten Sie auch Joda Time in Betracht ziehen, das diese Informationen nicht nur verfügbar macht, sondern auch in jeder Hinsicht eine bessere Datum/Zeit-API ist. –

2

Verwenden Sie Calendar.getWeekYear(), um den Jahreswert mit dem Feld Calendar.WEEK_OF_YEAR synchronisiert zu bekommen. Es gibt weitere Informationen über die Woche des Jahres und die Woche des Jahres unter GregorianCalendar doc.

Verwandte Themen