NSDate未显示确切的日期过去

时间:2013-05-05 21:54:18

标签: objective-c nsdate

我制作了一个小程序来计算两个日期之间的差异,并输出天数和过去几个月。该程序分别显示月数和罚款天数。但是,当我在一个标志中将它们连接在一起时,输出只显示正确的月数,并且无论我投入的日期是什么天数都是“12”。我也尝试过内联{{1} }),但同样的问题发生。这是我的代码。非常感谢您的帮助!

components: (NSDayCalendarUnit|NSMonthCalendarUnit

输出:

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{
 @autoreleasepool {
        NSDate *startDate=[NSDate dateWithString:@"2004-2-24 1:54:10 +0600"];
        NSDate *today=[NSDate date];
        NSCalendar *gregorian = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar];
        NSUInteger flags = NSMonthCalendarUnit | NSDayCalendarUnit;
        NSDateComponents *components = [gregorian components: flags  fromDate:startDate toDate:today options:0];
        NSInteger days = [components day];
        NSInteger months = [components month];
        NSLog(@"%li",(long)days);
        NSLog(@"%li",(long)months);  
    }
    return 0;
}

1 个答案:

答案 0 :(得分:1)

  

无论我投入什么日期,输出只显示天数“12”。

你确定吗?当我使用startDate @"2013-4-30 1:54:10 +0600"时,我看到days为6,months为0.您的代码看起来很好。

修改

以下是比较2个日期“日期”的方法,无论它们是在同一个月还是同一年。

NSCalendar* gregorian = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar] ;
NSDate* startDate = [NSDate dateWithString:@"2013-4-18 1:54:10 +0600"] ;
NSDate* today     = [NSDate dateWithString:@"2013-5-05 1:54:10 +0600"] ;
NSDateComponents* startDateComponents = [gregorian components:NSDayCalendarUnit fromDate:startDate] ;
NSDateComponents* todayComponents     = [gregorian components:NSDayCalendarUnit fromDate:today] ;
int daysApart = fabs(startDateComponents.day - todayComponents.day) ;