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 1Uż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.