【发布时间】:2015-05-12 02:12:48
【问题描述】:
我了解如何比较两个 NSDate 对象,例如:
if ([olderDate compare:[NSDate date]] == NSOrderedAscending) {
// do something
}
但是,我只想比较日期组件,而不是时间,因为在我的情况下,时间会使比较不准确。
是否可以只比较日、月和年?
【问题讨论】:
标签: ios objective-c nsdate
我了解如何比较两个 NSDate 对象,例如:
if ([olderDate compare:[NSDate date]] == NSOrderedAscending) {
// do something
}
但是,我只想比较日期组件,而不是时间,因为在我的情况下,时间会使比较不准确。
是否可以只比较日、月和年?
【问题讨论】:
标签: ios objective-c nsdate
从 iOS 8 开始,NSCalendar 提供了许多方便的方法来进行此类比较。
例如,有:
- (NSDate *)startOfDayForDate:(NSDate *)date NS_AVAILABLE(10_9, 8_0);
您可以从某个日期(例如 [NSDate date] 表示“现在”)获取给定一天的开始,然后与之进行比较。
还有:
- (NSComparisonResult)compareDate:(NSDate *)date1 toDate:(NSDate *)date2 toUnitGranularity:(NSCalendarUnit)unit NS_AVAILABLE(10_9, 8_0);
您可以使用粒度NSCalendarUnitDay 直接调用它来进行您想要的比较。
还有其他的。有关详细信息,请参阅 NSCalendar.h,因为这些方法似乎还没有出现在类参考文档中。
【讨论】:
- (NSComparisonResult)compareDate:(NSDate *)date1 toDate:(NSDate *)date2 toUnitGranularity:(NSCalendarUnit)unit NS_AVAILABLE(10_9, 8_0); 工作完美。谢谢!
你可以通过这种方式获取日期组件
NSDateComponents *components = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear fromDate:yourDate];
然后你可以比较
NSInteger day = [components day];
NSInteger month = [components month];
NSInteger year = [components year];
【讨论】:
你可以使用这个方法。
if ([olderDate timeIntervalSinceNow] > 0) {
// do something
}
【讨论】: