如何计算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;