这是我发现自己花了几个小时才弄清楚的事情,因此想与您分享。
问题是:我如何确定特定日期的一年中的哪一天?
例如,1 月 15 日是第 15 天,12 月 31 日是第 365 天,此时不是闰年。
这是我发现自己花了几个小时才弄清楚的事情,因此想与您分享。
问题是:我如何确定特定日期的一年中的哪一天?
例如,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
您要确定一年中的哪一天的日期在哪里。NSCalendar.ordinalityOfUnit 方法的文档在这里。
所以我想出的解决方案非常简洁明了,一点也不复杂。
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"D"];
NSUInteger dayOfYear = [[formatter stringFromDate:[NSDate date]] intValue];
[formatter release];
return dayOfYear;
我花了这么长时间才弄清楚的技巧是使用 NSDateFormatter。“D”是一年中的一天的标志。
希望这对和我有同样问题的你有帮助。
使用 ARC 并替换不推荐使用的符号,John Feminella 的答案如下所示:
NSCalendar *greg = [NSCalendar calendarWithIdentifier:NSCalendarIdentifierGregorian];
NSUInteger dayOfYear= [greg ordinalityOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitYear forDate:[NSDate date]];
Swift 4 变体:
let date = Date() // now
let calendar = Calendar(identifier: .gregorian)
let dayOfYear = calendar.ordinality(of: .day, in: .year, for: Date())
适用于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)")
}
使用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;