2011-11-07 12 views
17

Io uso il seguente per ottenere un numero di settimane da un NSDate:Come ottenere un numero settimanale da NSDate in modo coerente in tutte le versioni iOS?

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

Purtroppo, ottengo valori diversi in diverse versioni di iOS. I valori restituiti da iOS 4. * e 5 differiscono di 1. C'è un modo per recuperare il numero della settimana in modo coerente?

+3

che è corretto? Si prega di aggiungere una data che presenta il problema. – zaph

+0

Penso che ogni data presenti il ​​problema. Esempio concreto: il 6 gennaio 2011 (il primo giovedì dell'anno) indica 2 come numero della settimana in iOS 5, ma 1 in iOS 4. Ciò suggerisce che iOS 4 avrebbe potuto utilizzare i numeri delle settimane ISO, mentre iOS 5 non lo è. – hGP5b

risposta

-1

La numerazione delle settimane è standardizzata da ISO 8601.

Scommetto che iOS5 è corretto e che un bug è stato archiviato per iOS4.

Una possibile soluzione è aggiungere una soluzione alternativa che corregge il bug di iOS4.

7

iOS5 sembra essere sbagliato, Bug ID # 10412573.

Sommario: iOS5 NSDateComponents settimana riporta la settimana non corretta sia con NSWeekCalendarUnit e NSWeekOfYearCalendarUnit.

passaggi per riprodurre:

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

Risultati attesi: Lo stesso numero della settimana su iOS4 e iOS5. Per l'11/08/2011 la settimana dovrebbe essere 45.

Risultati effettivi: Il numero della stessa settimana su iOS5. Per l'11/08/2011 la settimana dovrebbe essere 46.

Regressione: iOS4 è corretto, iOS5 non è corretto.

+0

Potresti fornire un collegamento al bug? Ho provato su Google e ho anche cercato il portale per sviluppatori iOS, ma non riesco a trovare un modo per trovare il bug report. Mi piacerebbe seguire l'errore per vedere cosa dice Apple. – hGP5b

+0

Forse basta usare un'istruzione if per vedere se è iOS 5 e se è solo virata su un'altra settimana fino a quando il bug non viene corretto. Ovviamente però devi stare attento perché, quando lo risolvono, causerà un bug all'app. –

23

Poiché il dosatore NSCalender iOS5 sembra definire di conseguenza ISO 8601 come predefinito. È necessario impostare il calendario con il metodo "setMinimumDaysInFirstWeek" per ottenere il risultato del numero di settimana previsto.

[yourCalender setMinimumDaysInFirstWeek:4]; 

"4" significa giovedì in questo caso.

http://en.wikipedia.org/wiki/ISO_week_date "La prima settimana di un anno è la settimana che contiene il primo giovedì dell'anno".

Non so perché non è definito come "4" come predefinito in iOS5. Solo uno di quelli strano "bug" Immagino;)

E sì, questo funzionerà in entrambi iOS 4 e 5.

Problemi correlati