/ / Dziwne zachowanie ww SimpleDateFormat - java, parsing, simpledateformat

Dziwne zachowanie ww SimpleDateFormat - java, parsing, simpledateformat

Czy ktoś może wyjaśnić, dlaczego otrzymuję te wartości podczas próby przeanalizowania daty? Próbowałem trzech różnych danych wejściowych, jak następuje:

1) Trzeci tydzień 2013 r

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

Które wyjścia: 02.2013 (jak oczekiwałem)

2) Pierwszy tydzień 2013 r

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

Które wyjścia: 52.2012 (co jest dla mnie w porządku, ponieważ pierwszy tydzień 2013 r. jest również ostatnim w 2012 r.)

3) Drugi tydzień 2013 r

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

Które wyjścia: 1.2012 (co czyni absolutnie Nie sens dla mnie)

Czy ktoś wie, dlaczego tak się dzieje? Muszę przeanalizować datę w formacie (tydzień roku). (Rok). Czy używam niewłaściwego wzoru?

Odpowiedzi:

16 dla odpowiedzi nr 1

Używasz ww, który jest „tygodniem tygodnia”, ale potem yyyy który jest „rokiem kalendarzowym” zamiast „rokiem tygodnia”. Ustalenie tygodnia tygodnia, a następnie ustawienie roku kalendarzowego jest receptą na problemy, ponieważ są one po prostu osobnymi systemami numeracji.

Powinieneś używać YYYY w ciągu formatu, aby określić tydzień-rok ... chociaż niestety wygląda na to, że nie możesz otrzymać wartość w rozsądny sposób. (Spodziewałbym się Calendar.WEEKYEAR stały, ale nie ma czegoś takiego.)

Ponadto wartości tygodnia zaczynają się od 1, a nie od 0 ... i żaden tydzień nie przypada na dwa tygodnie; jego zarówno pierwszy tydzień 2013 r lub to ostatni tydzień 2012 roku ... to nie oba.

Osobiście unikałbym używania tygodni-tygodni i tygodni, jeśli to możliwe - mogą być bardzo mylące, szczególnie gdy data w jednym roku kalendarzowym przypada na inny rok.


2 dla odpowiedzi nr 2

Posługiwać się Calendar.getWeekYear () zsynchronizować wartość roku Calendar.WEEK_OF_YEAR pole. Więcej informacji na temat tygodnia roku i roku tygodnia na stronie Kalendarz gregoriański doc.