我的目标是获取一个NSDate,该NSDate与另一个NSDate代表同一天,但将小时,分钟,秒设置为0。

因此2013/11/27 13:23:32将成为2013/11/27 00:00:00。

我做了这个功能,我在网上找到了例子

+ (NSDate*)dayEarliestDateForDate:(NSDate*)date {
    NSCalendar* calendar = [NSCalendar currentCalendar];
    NSDateComponents* comps = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:date];
    [comps setHour:0];
    [comps setMinute:0];
    [comps setSecond:0];
    NSDate* dateEarliest = [calendar dateFromComponents:comps];
    return dateEarliest;
}

但是奇怪的是,当我运行它时
NSDate* date2 = [NSDate dayEarliestDateForDate:date1];

我得到这个:
(lldb) po date1
$3 = 0x11d98dc0 2013-08-**13** 07:37:58 +0000
(lldb) po date2
$4 = 0x140588f0 2013-08-**12** 22:00:00 +0000

如您所见,日子变了!

有任何想法吗 ?谢谢

最佳答案

Ludovic,因为NSDate只是“时间轴上的一刹那”,所以当您将NSLog记录到NSDate时,它会以格林威治时间的时区(即该时间之后的+0000)进行打印-而您没有为您的NSDateComponents comps对象定义任何时区,它只是使用GMT +0转换为NSDate,并且您可能处于GMT +2时区。

为了解决此问题,建议您将NSDateComponents的时区设置为object。

[comps setTimeZone:[NSTimeZone localTimeZone]];

或设置所需的时区(如果不是当地时间)。

关于ios - NSDate提取组件错误-不是同一天?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18203543/

10-14 16:58