2011-11-07 12 views
17

I użyć następującego aby uzyskać numer tygodnia z NSDate:Jak uzyskać numer tygodniowy od NSDate konsekwentnie we wszystkich wersjach iOS?

[[calendar components: NSWeekCalendarUnit fromDate:date] week] 

Niestety, mam różne wartości w różnych wersjach iOS. Wartości zwracane przez iOS 4. * i 5 różnią się 1. Czy istnieje sposób na ciągłe pobieranie numeru tygodnia?

+3

Która jest poprawna? Uzupełnij datę pokazującą problem. – zaph

+0

Myślę, że każda data wykazuje problem. Konkretny przykład: 6 stycznia 2011 r. (Pierwszy czwartek roku) daje 2 jako numer tygodnia w systemie iOS 5, ale 1 w systemie iOS 4. Sugeruje to, że iOS 4 mógł używać numerów tygodniowych ISO, a system iOS 5 nie. – hGP5b

Odpowiedz

-1

Numeracja tygodni jest standaryzowana przez ISO 8601.

Założę się, że iOS5 jest poprawny i że został zgłoszony błąd dla iOS4.

Możliwe rozwiązanie to dodanie obejścia, które naprawia błąd iOS4.

7

iOS5 wydaje się być błędne, Bug ID # 10412573.

Podsumowanie: iOS5 NSDateComponents tydzień donosi nieprawidłowy tygodni zarówno NSWeekCalendarUnit i NSWeekOfYearCalendarUnit.

Kroki prowadzące do odtworzenia:

NSCalendar *calendar = [NSCalendar currentCalendar]; 
NSDate *date = [NSDate date]; 
NSLog(@"week: %i", [[calendar components: NSWeekCalendarUnit fromDate:date] week]); 
NSLog(@"week: %i", [[calendar components: NSWeekOfYearCalendarUnit fromDate:date] weekOfYear]); 

Oczekiwane wyniki: ten sam numer tygodnia iOS4 i iOS5. Na dzień 08.08.2011 tydzień powinien wynosić 45.

Rzeczywiste wyniki: Ten sam numer tygodnia na iOS5. Na dzień 08.11.2011 tydzień powinien wynosić 46.

Regresja: Poprawiono iOS4, iOS5 jest niepoprawny.

+0

Czy możesz podać link do błędu? Próbowałem googlować, a także szukałem portalu deweloperów iOS, ale nie mogę znaleźć sposobu na znalezienie raportu o błędzie. Chciałbym śledzić błąd, aby zobaczyć, co mówi Apple. – hGP5b

+0

Może po prostu użyj instrukcji if, aby sprawdzić, czy jest to iOS 5, i czy jest to tylko jeden tydzień, dopóki błąd nie zostanie naprawiony. Oczywiście, chociaż musisz zachować ostrożność, ponieważ gdy to naprawią, spowoduje to, że aplikacja będzie miała błąd. –

23

Ponieważ iOS5 NSCalender wydaje się definiować zgodnie z ISO 8601 jako domyślny. Musisz ustawić swój kalendarz za pomocą metody "setMinimumDaysInFirstWeek", aby uzyskać oczekiwany wynik numeru tygodnia.

[yourCalender setMinimumDaysInFirstWeek:4]; 

"4" oznacza w tym przypadku czwartek.

http://en.wikipedia.org/wiki/ISO_week_date "Pierwszy tydzień roku to tydzień, który zawiera pierwszy czwartek roku."

Nie wiem, dlaczego nie jest on zdefiniowany jako "4" jako domyślny w iOS5. Tylko jeden z tych dziwnych „bugs” Chyba;)

I tak, to będzie działać zarówno w iOS 4 i 5.

Powiązane problemy