Question

Je sais que cette question a été posée un million de fois, je n'arrive tout simplement pas à trouver de solution.Le problème est:je modifie un NSDate pour renvoyer soit la date du premier jour du mois en cours, soit la date du premier jour du mois suivant.Cela semble fonctionner correctement, à l'exception d'une chose :ça restitue l'heure moins 2 ou 3 heures.

Code:

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

Voici le résultat du débogueur (gdb) :

(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

Toute aide serait grandement appréciée.

Merci.

Était-ce utile?

La solution

La date est affichée en GMT : 2012-02-29 00:00:00 +0000 est 2012-03-01 22:00:00 +0200.N'oubliez pas non plus le passage à l'heure d'été, ce qui explique pourquoi vous obtenez parfois un écart de 3 heures.

La date du résultat est correcte, mais le débogueur l'affiche en GMT.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top