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.

Était-ce utile?

La solution

Essayez ceci:

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

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

scroll top