Ios NSDate提取组件错误-不是同一天?
我的目标是获取一个NSDate,它表示与另一个NSDate相同的日期,但将小时、分钟、秒设置为0 因此2013/11/27 13:23:32将成为2013/11/27 00:00:00 我做了这个函数,我在网上找到了它的例子Ios NSDate提取组件错误-不是同一天?,ios,nsdate,nsdatecomponents,Ios,Nsdate,Nsdatecomponents,我的目标是获取一个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 =
+ (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只是“时间线中的一个时刻”,当你对NSDate进行NSLog时,它会以格林尼治时间的时区(即时间后的+0000)打印出来,并且由于你没有为你的
NSDate组件定义任何时区
comps
对象,它只是使用GMT+0转换为NSDate,您可能处于GMT+2区域
为了解决这个问题,我建议您将NSDateComponents的时区设置为object
[comps setTimeZone:[NSTimeZone localTimeZone]];
或者设置所需的时区,以防它不是本地的。Ludovic,因为NSDate只是“时间线中的一个时刻”,当您对NSDate进行NSLog时,它会将其打印为格林尼治时间的时区(即时间后的+0000)-并且由于您没有为
NSDateComponents
comps
对象定义任何时区,它只是使用GMT+0转换为NSDate,您可能处于GMT+2区域
为了解决这个问题,我建议您将NSDateComponents的时区设置为object
[comps setTimeZone:[NSTimeZone localTimeZone]];
或者设置所需的时区(如果不是本地的)。这是您所在时区的正确日期(GMT+2对吗?)这是您所在时区的正确日期(GMT+2对吗?)