Comment calculez-vous le jour de l'année pour une date précise en Objective-C?
-
21-09-2019 - |
Question
Ceci est quelque chose que je me suis retrouvé passer des heures à comprendre et que vous voulez donc partager avec vous.
La question était la suivante: Comment puis-je déterminer le jour de l'année pour une date spécifique
?par exemple. 15 janvier est le jour le 15 et le 31 Décembre est le 365e jour quand il saute pas année.
La solution
Essayez ceci:
NSCalendar *gregorian =
[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSUInteger dayOfYear =
[gregorian ordinalityOfUnit:NSDayCalendarUnit
inUnit:NSYearCalendarUnit forDate:[NSDate date]];
[gregorian release];
return dayOfYear;
où date
est la date que vous souhaitez déterminer le jour de l'année. La documentation sur la méthode NSCalendar.ordinalityOfUnit est .
Autres conseils
Alors la solution que je suis venu avec est assez propre et simple et en aucune façon compliquée.
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"D"];
NSUInteger dayOfYear = [[formatter stringFromDate:[NSDate date]] intValue];
[formatter release];
return dayOfYear;
L'astuce ici que j'ai passé si longtemps à comprendre était d'utiliser le NSDateFormatter. Le « D » est le drapeau pour le jour de l'année.
Espérons que cela a été utile pour vous qui ont le même problème que moi.
Utilisation de l'ARC et le remplacement des symboles dépréciés, la réponse de John Feminella ressemblerait à ceci:
NSCalendar *greg = [NSCalendar calendarWithIdentifier:NSCalendarIdentifierGregorian];
NSUInteger dayOfYear= [greg ordinalityOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitYear forDate:[NSDate date]];
Swift 4 variation:
let date = Date() // now
let calendar = Calendar(identifier: .gregorian)
let dayOfYear = calendar.ordinality(of: .day, in: .year, for: Date())
NSDate classe . Utilisez un message timeIntervalSinceDate
. Il vous renvoie un