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

时间:2010-01-17 12:21:22

标签: iphone objective-c nsdate nsdateformatter

我发现自己花了好几个小时才想出来,因此想和你分享。

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

  

e.g。 1月15日是第15天,12月31日是第37天,而不是闰年。

6 个答案:

答案 0 :(得分:73)

试试这个:

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

其中date是您要确定一年中某一天的日期。 NSCalendar.ordinalityOfUnit方法的文档是 here

答案 1 :(得分:6)

因此,我提出的解决方案非常简洁,而且不会复杂。

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

我花了这么长时间才弄明白这个技巧就是使用NSDateFormatter。 “D”是一年中的标志。

希望这对我遇到同样问题的人有所帮助。

答案 2 :(得分:4)

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

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

答案 3 :(得分:0)

快速4版本:

let date = Date() // now
let calendar = Calendar(identifier: .gregorian)
let dayOfYear = calendar.ordinality(of: .day, in: .year, for: Date()) 

答案 4 :(得分:0)

适用于 Apple Swift 5.4.2 版

    let formatter = DateFormatter()
    formatter.dateFormat = "d"
    let day = formatter.string(from: Date())
    
    if let dd = Int(day){
        print("day: \(dd)")
    }

答案 5 :(得分:-2)

使用NSDate课程。使用消息timeIntervalSinceDate。它将返回一个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;