我的目标是让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
如你所见,这一天发生了变化!
有什么想法吗?谢谢
答案 0 :(得分:1)
Ludovic,因为NSDate只是“时间轴上的一个时刻”,当您对NSDate进行NSLog时,它会以格林威治时间的时区(即时间后的+0000)打印出来 - 当你没有为您的NSDateComponents
comps
对象定义任何时区,它只是使用GMT + 0转换为NSDate,而您可能处于GMT +2区域。
为了解决这个问题,我建议你将NSDateComponents的时区设置为对象。
[comps setTimeZone:[NSTimeZone localTimeZone]];
或设置所需的时区,以防它不是本地时区。