2011-11-07 7 views
17

que usar lo siguiente para obtener un número de semanas de un NSDate:¿Cómo obtener un número de semana de NSDate consistentemente en todas las versiones de iOS?

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

Por desgracia, me sale valores diferentes en diferentes versiones de iOS. Los valores devueltos por iOS 4. * y 5 difieren en 1. ¿Hay alguna forma de recuperar el número de la semana de forma coherente?

+3

Qué es lo correcto? Por favor, agregue una fecha que muestre el problema. – zaph

+0

Creo que cada fecha muestra el problema. Ejemplo concreto: el 6 de enero de 2011 (el primer jueves del año) da 2 como número de semana en iOS 5, pero 1 en iOS 4. Esto sugiere que iOS 4 podría haber estado usando números de semana ISO, mientras que iOS 5 no. – hGP5b

Respuesta

-1

La numeración de la semana está estandarizada por ISO 8601.

Apuesto a que iOS5 es correcto y que se ha presentado un error para iOS4.

Una posible solución es agregar una solución que corrige el error de iOS4.

7

IOS5 parece estar mal, Bug ID # 10412573.

Resumen: IOS5 NSDateComponents semana reporta la semana incorrecta tanto con NSWeekCalendarUnit y NSWeekOfYearCalendarUnit.

Pasos para reproducir:

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

Resultados esperados: El mismo número de la semana en iOS4 y iOS5. Para 11/8/2011, la semana debe ser 45.

Resultados reales: El mismo número de semana en iOS5. Para 11/8/2011, la semana debería ser 46.

Regresión: iOS4 es correcto, iOS5 es incorrecto.

+0

¿Podría proporcionar un enlace al error? Intenté buscar en Google y también busqué en el portal para desarrolladores de iOS, pero no encuentro la forma de encontrar el informe de errores. Me gustaría seguir el error para ver lo que dice Apple. – hGP5b

+0

Tal vez solo use una instrucción if para ver si es iOS 5 y si solo está listo una semana más hasta que se solucione el error. Por supuesto, aunque debes ser cuidadoso porque cuando lo arreglen, causará que la aplicación tenga un error. –

23

Dado que el dosent NSCalender iOS5 parece estar definiendo de acuerdo con ISO 8601 como predeterminado. Debe configurar su calendario con el método "setMinimumDaysInFirstWeek" para obtener el resultado del número de semana esperado.

[yourCalender setMinimumDaysInFirstWeek:4]; 

"4" significa jueves en este caso.

http://en.wikipedia.org/wiki/ISO_week_date "La primera semana de un año es la semana que contiene el primer jueves del año".

No sé por qué no está definido como "4" por defecto en iOS5. Sólo uno de los extraño "errores" que supongo;)

Y sí, esto va a funcionar en ambos iOS 4 y 5.

Cuestiones relacionadas