为了账号安全,请及时绑定邮箱和手机立即绑定

比较两个NSDate并忽略时间分量

比较两个NSDate并忽略时间分量

DIEA 2019-12-17 15:20:25
比较两个NSDate的最有效/推荐的方法是什么?我希望能够看到两个日期是否都在同一天,与时间无关,并且已经开始编写一些代码,该代码使用NSDate类中的timeIntervalSinceDate:方法,并获取该值的整数除以秒数一天内。这似乎很漫长,我觉得我缺少明显的东西。我要修复的代码是:if (!([key compare:todaysDate] == NSOrderedDescending)){    todaysDateSection = [eventSectionsArray count] - 1;}其中key和todaysDate是NSDate对象,而todaysDate使用以下方法创建:NSDate *todaysDate = [[NSDate alloc] init];
查看完整描述

3 回答

?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

在进行比较之前,您将日期中的时间设置为00:00:00:


unsigned int flags = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay;

NSCalendar* calendar = [NSCalendar currentCalendar];


NSDateComponents* components = [calendar components:flags fromDate:date];


NSDate* dateOnly = [calendar dateFromComponents:components];


// ... necessary cleanup


查看完整回答
反对 回复 2019-12-17
?
慕勒3428872

TA贡献1848条经验 获得超6个赞

令我惊讶的是,没有其他答案可以使用此选项来获取对象的“开始日期”日期:


[[NSCalendar currentCalendar] rangeOfUnit:NSCalendarUnitDay startDate:&date1 interval:NULL forDate:date1];

[[NSCalendar currentCalendar] rangeOfUnit:NSCalendarUnitDay startDate:&date2 interval:NULL forDate:date2];

哪个设置date1并date2开始各自的日子。如果它们相等,则它们在同一天。


或此选项:


NSUInteger day1 = [[NSCalendar currentCalendar] ordinalityOfUnit:NSDayCalendarUnit inUnit: forDate:date1];

NSUInteger day2 = [[NSCalendar currentCalendar] ordinalityOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitEra forDate:date2];

其中规定day1,并day2以可以比较有点武断值。如果它们相等,则它们在同一天。


查看完整回答
反对 回复 2019-12-17
?
繁星coding

TA贡献1797条经验 获得超4个赞

iOS 8向NSCalendar引入了一种新方法,使此操作变得更加容易。


- (NSComparisonResult)compareDate:(NSDate *)date1 toDate:(NSDate *)date2 toUnitGranularity:(NSCalendarUnit)unit NS_AVAILABLE(10_9, 8_0);

您可以将粒度设置为重要的单位。这将忽略所有其他单位,并将比较范围限制为所选单位。


查看完整回答
反对 回复 2019-12-17
  • 3 回答
  • 0 关注
  • 809 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信