Вопрос

Я знаю, что этот вопрос был задан миллион раз, я просто не могу найти решение.Проблема в том, что я изменяю генеракодицетагкод, чтобы вернуть ни дату первого дня в текущем месяце или дате первого дня в следующем месяце.Похоже, работает нормально, за исключением 1 вещи: он возвращает время минус 2 или 3 часа.

код:

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

Вот вывод отладчика (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
.

Любая помощь будет очень ценится.

Спасибо.

Это было полезно?

Решение

Дата отображается в GMT: 2012-02-29 00:00:00 +0000 является 2012-03-01 22:00:00 +0200.Также не забудьте переход на летнее время, которое объясняет, почему вы получите разницу в течение 3 часов иногда.

Дата результата верна, но отладчик отображает его в GMT.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top