Pregunta

Tengo este código:

NSDateComponents *components = [[[NSDateComponents alloc] init] autorelease];
[components setYear:2011];
[components setDay:1];
[components setMonth:4];
NSCalendar *gregorianCalendar = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
NSDate *firstDate = [gregorianCalendar dateFromComponents:components];
NSLog(@"date:%@", firstDate);

El resultado en la consola es:

date:2011-03-31

¿¿¿¿por qué???? Si configure "Setday: 1" It Sería "Fecha: 2011-04-01", ¿no?

¿Fue útil?

Solución

Creo que este podría ser un problema relacionado con la zona horaria. Asegúrese de establecer su zona horaria en NSDateComponents:

[ components setTimeZone:[ NSTimeZone systemTimeZone ] ] ;

Otros consejos

También depende del formato de fecha. Mis fechas eran de 1 año para YYYY y lo cambio a yyyy (minúscula) Luego fue fijo. Tenga cuidado con eso.

Probar:

   [components setWeekdayOrdinal:1]; // The first day in the month

De los documentos de NSDateComponents:

Puede configurar una instancia de NSDateComponents para especificar los componentes de una fecha y luego usar el método NSCALENDAR dateFomComponents: para crear el objeto de fecha correspondiente. Puede proporcionar tantos componentes como necesite (o elegir). Cuando hay información incompleta para calcular un tiempo absoluto, los valores predeterminados como 0 y 1 generalmente son elegidos por un calendario, pero esta es una elección específica del calendario. Si proporciona información inconsistente, se realiza la desambiguación específica del calendario (lo que puede implicar ignorar uno o más de los parámetros).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top