2016-01-05 2 views
8

Der folgende Code berechnet die Arbeitswoche eines bestimmten Datums.Ein Fehler in der Kalenderwoche im Java Kalender?

DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
Calendar cal = new GregorianCalendar(); 
cal.setTime(df.parse("2015-12-27 08:00:00")); 
System.err.printf("%d.%02d\n", cal.getWeekYear(), cal.get(Calendar.WEEK_OF_YEAR)); 

Es druckt derzeit 2016.01.

Wie ich die Arbeitswoche Nummer Spezifikation verstehe, ist 2016.01 die erste Woche mit 4 Tagen im Jahr 2016, aber es gibt keine Möglichkeit, 27. Dezember kann zu solchen Woche gehören.

Gibt es eine Möglichkeit, dies in Java 7 zu tun, die für ein beliebiges Jahr funktioniert, wenn Wochen am Montag beginnen?

+5

Woche Regeln sind anders auf der ganzen Welt, in welchem ​​Ort sind Sie? – nos

+3

Und was liefert 'cal.getFirstDayOfWeek()' zusammen mit 'cal.getMinimalDaysInFirstWeek()'? –

+0

@JonSkeet, es wurde auf 1 gesetzt, ich hätte es auf 4 setzen sollen. – Evgeny

Antwort

6

Versuchen Sie, Montag als ersten Tag der Woche einzustellen.

cal.setFirstDayOfWeek(Calendar.MONDAY); 
+0

Auch cal.setMinimalDaysInFirstWeek (4); – Evgeny