NSDate和NSDateComponents返回错误的日期

NSDate和NSDateComponents返回错误的日期

问题描述:

我知道这个问题被问了一百万次,我只是找不到解决方案。问题是:我正在修改NSDate以返回当前月份的第一天的日期或下个月的第一天的日期。它似乎工作得很好,除了1件事:它减少了2或3个小时的时间。NSDate和NSDateComponents返回错误的日期

代码:

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 

任何帮助将不胜感激。

谢谢。

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

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

+0

嗯......奇怪,但它是真的。我确实希望调试器/ NSLog的规格化输出。谢谢 – Novarg 2012-03-12 14:23:47