目标C – 从今天(明天)开始第二天

我如何检查一个date是否固有地TOMORROW?

我不想在今天这样的日子上增加几个小时或者任何东西,因为如果今天已经是22:59 ,那么增加太多的时间会在一天之后结束,如果时间是12:00那么增加得太less会明天错过。

我怎样才能检查两个NSDate并确保其中一个相当于明天呢?

使用NSDateComponents您可以从当前date中提取日/月/年组件,忽略小时/分钟/秒组件,添加一天,并重build与明天相对应的date。

因此,想象一下,如果想在当前date中添加一天(包括将小时/分钟/秒信息与“现在”date保持一致),则可以使用dateWithTimeIntervalSinceNow将24 * 60 * 60秒的timeInterval添加到“now” ,但是使用NSDateComponents这样做更好(和防DST等):

 NSDateComponents* deltaComps = [[[NSDateComponents alloc] init] autorelease]; [deltaComps setDay:1]; NSDate* tomorrow = [[NSCalendar currentCalendar] dateByAddingComponents:deltaComps toDate:[NSDate date] options:0]; 

但是如果你想在午夜生成与明天相对应的date ,你可以取而代之的检索代performance在的date的月/日/年组件, 而不需要小时/分钟/秒的部分 ,并添加1天,然后重builddate:

 // Decompose the date corresponding to "now" into Year+Month+Day components NSUInteger units = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay; NSDateComponents *comps = [[NSCalendar currentCalendar] components:units fromDate:[NSDate date]]; // Add one day comps.day = comps.day + 1; // no worries: even if it is the end of the month it will wrap to the next month, see doc // Recompose a new date, without any time information (so this will be at midnight) NSDate *tomorrowMidnight = [[NSCalendar currentCalendar] dateFromComponents:comps]; 

PS:您可以阅读date和时间编程指南中有关date概念的非常有用的build议和内容,尤其是关于date组件 。

在iOS 8中, NSCalendar上有一个名为isDateInTomorrow的便捷方法。

Objective-C的

 NSDate *date; BOOL isTomorrow = [[NSCalendar currentCalendar] isDateInTomorrow:date]; 

Swift 3

 let date: Date let isTomorrow = Calendar.current.isDateInTomorrow(date) 

Swift 2

 let date: NSDate let isTomorrow = NSCalendar.currentCalendar().isDateInTomorrow(date)