25

这是我发现自己花了几个小时才弄清楚的事情,因此想与您分享。

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

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

4

6 回答 6

75

试试这个:

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

date您要确定一年中的哪一天的日期在哪里。NSCalendar.ordinalityOfUnit 方法的文档在这里

于 2010-01-17T12:28:55.830 回答
9

所以我想出的解决方案非常简洁明了,一点也不复杂。

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

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

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

于 2010-01-17T12:28:15.860 回答
5

使用 ARC 并替换不推荐使用的符号,John Feminella 的答案如下所示:

NSCalendar *greg    = [NSCalendar calendarWithIdentifier:NSCalendarIdentifierGregorian];
NSUInteger dayOfYear= [greg ordinalityOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitYear forDate:[NSDate date]];
于 2016-03-10T15:39:11.730 回答
0

Swift 4 变体:

let date = Date() // now
let calendar = Calendar(identifier: .gregorian)
let dayOfYear = calendar.ordinality(of: .day, in: .year, for: Date()) 
于 2018-09-08T05:14:29.400 回答
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)")
    }
于 2021-07-27T11:59:22.007 回答
-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;
于 2010-01-17T12:27:15.290 回答