如何计算Objective-C中特定date的一年中的哪一天?

这是我花了几个小时才弄清楚的,因此想和大家分享一下。

问题是:如何确定特定date的一年中的哪一天?

例如1月15日是第15天,12月31日是不是闰年的第365天。

尝试这个:

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; NSUInteger dayOfYear = [gregorian ordinalityOfUnit:NSDayCalendarUnit inUnit:NSYearCalendarUnit forDate:[NSDate date]]; [gregorian release]; return dayOfYear; 

date是你想确定一年中某一天的date。 NSCalendar.ordinalityOfUnit方法的文档在这里

所以我提出的解决scheme非常简洁而且没有任何复杂性。

 NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:@"D"]; NSUInteger dayOfYear = [[formatter stringFromDate:[NSDate date]] intValue]; [formatter release]; return dayOfYear; 

我花了这么长时间才弄清楚的技巧是使用NSDateFormatter。 “D”是一年中的国旗。

希望这对你有和我一样的问题有帮助。

使用ARC并replace已弃用的符号,John Feminella的答案如下所示:

 NSCalendar *greg = [NSCalendar calendarWithIdentifier:NSCalendarIdentifierGregorian]; NSUInteger dayOfYear= [greg ordinalityOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitYear forDate:[NSDate date]]; 

使用NSDate类。 使用消息timeIntervalSinceDate 。 它会返回一个NSTimeInterval值(实际上是双精度值),它表示从你想要的date开始经过的秒数。 在那之后,很容易把秒转换成日。

如果你截断seconds/86400会给你几天。

假设你想要2010年1月1日以后的日子。

 // current date/time NSDate *now = [[NSData alloc] init]; // seconds elapsed since January 1st 2010 00:00:00 (GMT -4) until now NSInteval interval = [now timeIntervalSinceDate: [NSDate dateWithString:@"2010-01-01 00:00:00 -0400"]]; // days since January 1st 2010 00:00:00 (GMT -4) until now int days = (int)interval/86400;