我发现自己花了好几个小时才想出来,因此想和你分享。
问题是:如何确定特定日期的一年中的某一天?
e.g。 1月15日是第15天,12月31日是第37天,而不是闰年。
答案 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;