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




objective c date format (4)

這是我發現自己花了幾個小時才弄明白並因此想與你分享的事情。

問題是:我如何確定特定日期的一年中的哪一天?

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


使用ARC並替換棄用的符號,John Feminella的答案如下所示:

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

使用NSDate類。 使用消息timeIntervalSinceDate 。 它將返回一個NSTimeInterval值(實際上它是一個雙NSTimeInterval值),表示自所需日期起經過的秒數。 在那之後,很容易轉換為秒。

如果截斷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;

因此,我提出的解決方案非常簡潔,並沒有任何復雜的問題。

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

我花了這麼長時間才弄明白的問題是使用NSDateFormatter。 “D”是一年中的標誌。

希望這對你有同樣問題的人有所幫助。


嘗試這個:

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

其中date是您要確定一年中某一天的日期。 有關NSCalendar.ordinalityOfUnit方法的文檔就在here





nsdateformatter