比较NSDate的某些组件?

时间:2011-03-16 20:45:41

标签: iphone comparison nsdate

我如何只比较2 NSDates的年 - 月 - 日组件?

4 个答案:

答案 0 :(得分:11)

所以这就是你如何做到的:

NSCalendar *calendar = [NSCalendar currentCalendar];
NSInteger desiredComponents = (NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit);

NSDate *firstDate = ...; // one date
NSDate *secondDate = ...; // the other date

NSDateComponents *firstComponents = [calendar components:desiredComponents fromDate:firstDate];
NSDateComponents *secondComponents = [calendar components:desiredComponents fromDate:secondDate];

NSDate *truncatedFirst = [calendar dateFromComponents:firstComponents];
NSDate *truncatedSecond = [calendar dateFromComponents:secondComponents];

NSComparisonResult result = [truncatedFirst compare:truncatedSecond];
if (result == NSOrderedAscending) {
  //firstDate is before secondDate
} else if (result == NSOrderedDescending) {
  //firstDate is after secondDate
}  else {
  //firstDate is the same day/month/year as secondDate
}

基本上,我们采用两个日期,砍掉他们的小时 - 分钟 - 秒位,然后将它们转回日期。然后,我们比较那些日期(不再有时间组件;只有日期组件),看看它们是如何比较的。

警告:在浏览器中键入但未编译。警告实施者

答案 1 :(得分:4)

查看此主题NSDate get year/month/day

拔出日/月/年后,您可以将它们作为整数进行比较。

如果你不喜欢那种方法

相反,你可以尝试这个..

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];

[dateFormatter setDateFormat:@"yyyy"];
int year = [[dateFormatter stringFromDate:[NSDate date]] intValue];

[dateFormatter setDateFormat:@"MM"];
int month = [[dateFormatter stringFromDate:[NSDate date]] intValue];

[dateFormatter setDateFormat:@"dd"];
int day = [[dateFormatter stringFromDate:[NSDate date]] intValue];
  • 另一种方式......

    NSDateComponents *dateComp = [calendar components:unitFlags fromDate:date];
    
    NSInteger year = [dateComp year];
    
    NSInteger month = [dateComp month];
    
    NSInteger day = [dateComp day];
    

答案 2 :(得分:0)

从iOS 8开始,您可以使用-compareDate:toDate:toUnitGranularity:的{​​{1}}方法。

像这样:

NSCalendar

答案 3 :(得分:-1)

使用-[NSDate compare:]方法 - NSDate Compare Reference