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

God*_*emo 24 iphone objective-c nsdate nsdateformatter

这是我发现自己花了几个小时才弄明白并因此想与你分享的事情.

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

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

Joh*_*lla 73

试试这个:

NSCalendar *gregorian =
   [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSUInteger dayOfYear =
   [gregorian ordinalityOfUnit:NSDayCalendarUnit
     inUnit:NSYearCalendarUnit forDate:[NSDate date]];
[gregorian release];
return dayOfYear;
Run Code Online (Sandbox Code Playgroud)

这里date是你要确定一年的一天的日期.NSCalendar.ordinalityOfUnit方法的文档就在这里.


God*_*emo 6

因此,我提出的解决方案非常简洁,并没有任何复杂的问题.

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"D"];
NSUInteger dayOfYear = [[formatter stringFromDate:[NSDate date]] intValue];
[formatter release];
return dayOfYear;
Run Code Online (Sandbox Code Playgroud)

我花了这么长时间才弄清楚这里的技巧是使用NSDateFormatter."D"是一年中的标志.

希望这对你有同样问题的人有所帮助.


Moj*_*o66 5

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

NSCalendar *greg    = [NSCalendar calendarWithIdentifier:NSCalendarIdentifierGregorian];
NSUInteger dayOfYear= [greg ordinalityOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitYear forDate:[NSDate date]];
Run Code Online (Sandbox Code Playgroud)