2016-01-05 12 views
8

Il seguente codice calcola il workweek di una data specifica.Un bug nella settimana dell'anno nel calendario Java?

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)); 

Attualmente stampa 2016.01.

Come ho capito le specifiche del numero della settimana lavorativa, 2016.01 è la prima settimana con 4 giorni nel 2016, ma non c'è modo che il 27 dicembre possa appartenere a tale settimana.

C'è un modo per farlo in Java 7 che funzionerà per qualsiasi anno supponendo che le settimane iniziano il lunedì?

+5

Le regole della settimana sono diverse in tutto il mondo, in che locale ci si trova? – nos

+3

E cosa restituisce 'cal.getFirstDayOfWeek()' insieme a 'cal.getMinimalDaysInFirstWeek()'? –

+0

@JonSkeet, era impostato su 1, avrei dovuto impostarlo su 4. – Evgeny

risposta

6

Provare a impostare lunedì come primo giorno della settimana.

cal.setFirstDayOfWeek(Calendar.MONDAY); 
+0

Anche cal.setMinimalDaysInFirstWeek (4); – Evgeny

Problemi correlati