NSDate和NSDateComponents返回错误的日期

时间:2012-03-12 14:10:30

标签: objective-c ios nsdate nsdatecomponents

我知道这个问题被问了一百万次,我找不到解决办法。问题是:我正在修改NSDate以返回当月第一天的日期或下个月第一天的日期。它似乎工作正常,除了一件事:它减去时间减去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

非常感谢任何帮助。

谢谢。

1 个答案:

答案 0 :(得分:5)

日期以GMT显示:2012-02-29 00:00:00 +00002012-03-01 22:00:00 +0200。另外,不要忘记夏令时变化,这解释了为什么有时会有3个小时的差异。

结果日期是正确的,但调试器会以GMT格式显示它。