消息elapsedDays
的接收方在方法实现范围内为self
。
例如:
#import <Foundation/Foundation.h>
@interface NSDate (ElapsedDays)
- (NSInteger)elapsedDaysSinceDate:(NSDate *)theDate;
@end
@implementation NSDate (ElapsedDays)
static const NSInteger SecondsPerDay = 86400;
- (NSInteger)elapsedDaysSinceDate:(NSDate *)theDate {
NSTimeInterval interval = [self timeIntervalSinceDate:theDate];
return interval/SecondsPerDay;
}
@end
int main(int argc, char *argv[]) {
@autoreleasepool {
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"MMddyyyy"];
NSDate *date1 = [dateFormatter dateFromString:@"01012012"];
NSDate *date2 = [dateFormatter dateFromString:@"12312012"];
printf("Date difference = %ld",[date2 elapsedDaysSinceDate:date1]);
}
}
Date difference = 365
打印到控制台。
EDIT(使用公历历法计算)
#import <Foundation/Foundation.h>
@interface NSDate (ElapsedDays)
- (NSInteger)elapsedDaysSinceDate:(NSDate *)theDate;
@end
@implementation NSDate (ElapsedDays)
- (NSInteger)elapsedDaysSinceDate:(NSDate *)theDate {
NSTimeInterval interval = [self timeIntervalSinceDate:theDate];
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *components = [gregorian components:NSDayCalendarUnit
fromDate:theDate
toDate:self
options:0];
return [components day];
}
@end
int main(int argc, char *argv[]) {
@autoreleasepool {
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"MMddyyyy"];
NSDate *date1 = [dateFormatter dateFromString:@"01012012"];
NSDate *date2 = [dateFormatter dateFromString:@"12312012"];
printf("Date difference = %ld",[date2 elapsedDaysSinceDate:date1]);
}
}
+1使用自我的正确答案。但实施不会考虑夏令时的变化。你应该使用日期组件。 – Abizern
啊,是的,所有的日子都忘记了! – FluffulousChimp
好吧,我明白了。谢谢! – Mika