2013-01-01 39 views
0

我的类别增加的NSDate如下:获得一个NSDate日期的日期从一个类别中

@interface NSDate (ElapsedDays) 

-(unsigned long) elapsedDays: (NSDate *) theDate; 

@end 

@implementation NSDate (ElapsedDays) 

-(unsigned long) elapsedDays:(NSDate *)theDate 
{ 
    self.[???] 
} 

@end 

在主,我宣布的NSDate如下:

NSDate *today=[NSDate date]; 

现在在elapsedDays实现,我如何访问NSDate初始化的日期?

回答

2

消息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

+1使用自我的正确答案。但实施不会考虑夏令时的变化。你应该使用日期组件。 – Abizern

+0

啊,是的,所有的日子都忘记了! – FluffulousChimp

+0

好吧,我明白了。谢谢! – Mika

相关问题