Pregunta

Sé que esta pregunta se la hicieron a un millón de veces, yo simplemente no puede encontrar una solución.El problema es:Estoy modificando un NSDate para devolver la fecha del primer día del mes actual o la fecha del primer día del siguiente mes.Parece estar funcionando bien, excepto por 1 cosa:se da de nuevo la hora de la menos 2 o 3 horas.

Código:

NSCalendar *theCalendar = [NSCalendar currentCalendar];
int comp = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;
NSDateComponents *theComp = [theCalendar components:comp fromDate:date];
[theComp setTimeZone:[NSTimeZone systemTimeZone]];
switch (roundingMode) {
    case FIRST_OF_MONTH:
        [theComp setDay:1];
        return [theCalendar dateFromComponents:theComp];
    case FIRST_OF_NEXT_MONTH:
        [theComp setMonth:theComp.month+1];
        [theComp setDay:1];
        return [theCalendar dateFromComponents:theComp];
}

Aquí está el depurador(gdb) de salida:

(gdb) po theComp
<NSDateComponents: 0x6e26170>
  TimeZone: Europe/Kiev (EET) offset 7200
  Calendar Year: 2012
  Month: 3
  Day: 1
(gdb) po date
2012-03-12 13:05:22 +0000
(gdb) po [theCalendar dateFromComponents:theComp]
2012-02-29 22:00:00 +0000

Cualquier ayuda sería muy apreciada.

Gracias.

¿Fue útil?

Solución

Se muestra la fecha en GMT: 2012-02-29 00:00:00 +0000 es 2012-03-01 22:00:00 +0200.También no se olvide de cambio de horario de verano en la que explica por qué usted consigue una diferencia de 3 horas a veces.

El resultado de la fecha es correcta, pero el depurador muestra en GMT.

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