NSDate和NSDateComponents返回错误的date

我知道这个问题被问了一百万次,我只是找不到解决办法。 问题是:我正在修改NSDate以返回当前月份的第一天的date或下一个月的第一天的date。 除了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]; } 

这是debugging器(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 

任何帮助将不胜感激。

谢谢。

date显示格林威治标准时间: 2012-02-29 00:00:00 +00002012-03-01 22:00:00 +0200 。 另外不要忘记夏令时的变化,这就解释了为什么有时你会得到3小时的差异。

结果date是正确的,但debugging器显示在GMT。