基本上,我想弄清楚它是否是第二天。因此,我将当前日期(例如1月2日)不断存储在plist中。但是下次用户打开应用程序时,如果日期已经改变(例如1月3日),我想做点什么。请注意,简单的升序检查不起作用,因为我不想知道一个日期是否晚于另一个日期,如果差异仅以小时为单位。我需要能够区分1月2日11:50和1月3日2:34而不是1月3日2:34和1月3日5:12。
答案 0 :(得分:24)
我使用以下内容找到了SO:
- (BOOL)isSameDay:(NSDate*)date1 otherDay:(NSDate*)date2 {
NSCalendar* calendar = [NSCalendar currentCalendar];
unsigned unitFlags = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay;
NSDateComponents* comp1 = [calendar components:unitFlags fromDate:date1];
NSDateComponents* comp2 = [calendar components:unitFlags fromDate:date2];
return [comp1 day] == [comp2 day] &&
[comp1 month] == [comp2 month] &&
[comp1 year] == [comp2 year];
}
答案 1 :(得分:0)
查看Date Time Programming Guide为您提供了一个如何按组件计算两个日期之间差异的示例:例如:
NSDate *startDate = ...;
NSDate *endDate = ...;
NSCalendar *gregorian = [[NSCalendar alloc]
initWithCalendarIdentifier:NSGregorianCalendar];
NSUInteger unitFlags = NSMonthCalendarUnit | NSDayCalendarUnit;
NSDateComponents *components = [gregorian components:unitFlags
fromDate:startDate
toDate:endDate options:0];
NSInteger months = [components month];
NSInteger days = [components day];
答案 2 :(得分:-1)
我的版本基于Neils'(警告:未经测试):
Mine与NSDate上的- (NSComparisonResult)compare:
更相似。要检查天数相等,请执行[myDate compareDayMonthAndYear:otherDate] == NSOrderedSame
- (NSComparisonResult)compareDayMonthAndYear:(NSDate *)date
{
NSCalendar *calendar = [NSCalendar currentCalendar];
unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;
NSDateComponents *selfComponents = [calendar components:unitFlags fromDate:self];
NSDateComponents *dateComponents = [calendar components:unitFlags fromDate:date];
BOOL dayIsEqual = (selfComponents.day == dateComponents.day && selfComponents.month == dateComponents.month && selfComponents.year == dateComponents.year);
if (dayIsEqual) {
return NSOrderedSame;
}
return [self compare:date];
}
答案 3 :(得分:-2)
使用NSCalendarDate代替NSDate,并比较它们从-dayOfCommonEra
返回的内容
@implementation NSDate (sameDayOrNot)
- (BOOL) sameDayAsDate:(NSDate *) otherDate
{
NSCalendarDate *date1 = [[NSCalendarDate alloc] initWithTimeInterval:0 sinceDate:self];
NSCalendarDate *date2 = [[NSCalendarDate alloc] initWithTimeInterval:0 sinceDate:otherDate];
BOOL result = ([date1 dayOfCommonEra] == [date2 dayOfCommonEra]);
[date1 release];
[date2 release];
return result;
}
@end