我的目标是获取一个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/