2011-05-07 16 views
5

ejecuto siguiente fragmento de código:día 1 de mes usando NSCalendar

NSCalendar *gregorian = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar]; 
NSDateComponents *comp = [gregorian components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) fromDate:[NSDate date]]; 
[comp setDay:1]; 

NSDate *firstDayOfMonthDate = [gregorian dateFromComponents:comp]; 

El valor de firstDayOfMonthDate es = 30-4-2011 pero excpeted es decir, 01/05/2011 Quiero primera fecha del mes de cualquier fecha especificada. Pero me da la última fecha del mes anterior.

gracias de antemano.

+4

Probablemente una cosa zona horaria – JustSid

+0

¿Cuál es el valor de [fecha NSDate]? – Radu

+0

También creo que es algo de timezone. Pero también intenté estableciendo 2 valores de zona horaria diferentes: 1. timeZoneWithAbreviation: EST funciona, pero da probelma si la aplicación se ejecuta en EE. UU. Estoy desarrollando código en India (Asia) 2. systemTimeZone: da fecha 30-4-2011. –

Respuesta

10

Añadir

[gregorian setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]]; 

después de inicializar su NSCalendar.

[NSDate date] volverá una fecha en la zona UTC, así un intervalo absoluta desde 1 de enero de 2001 a las 00:00 GMT, pero la NSCalendar tiene su timeZone establecer la zona horaria por defecto que puede no ser UTC.

UTC es el "mismo" como UTC, una cita de Wikipedia:

En un uso ocasional, cuando fracciones de segundo no son importantes, Greenwich Mean Time (GMT) puede considerarse equivalente a UTC o UT1. Decir "GMT" a menudo implica UTC o UT1 cuando se usa dentro de contextos informales o informales . En contextos técnicos, se evita el uso de "GMT"; la terminología inequívoca "UTC" o "UT1" es preferida. [3]

+1

gracias. Funcionó. Pero no estoy recibiendo dos puntos que 1. ¿Por qué? funciona cuando configuro [gregorian setTimeZone: [NSTimeZone systemTimeZone]]; 2. Qué puntos se deben considerar al usar NSDate & NSCalendar en la aplicación para que este tipo de problemas no se vuelvan a enfrentar. –

Cuestiones relacionadas