目标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)