En Objective-C, pour get l'heure et la minute actuelles comme entiers, nous devons utiliser NSDateComponents et NSCalendar?

Je voudrais get l'heure et la minute actuelles comme entiers. Donc, si tout de suite est 03h16, j'aimerais get les deux nombres entiers: 3 et 16.

Mais il semble que [NSDate date] donnera le nombre de secondes depuis 1970, ou il peut donner une string de la représentation de l'heure actuelle, mais il n'y a pas de moyen facile de les get comme entiers?

Je vois un post dans Obtenir l'heure actuelle , mais il impliquait NSDateComponents et NSCalendar ? C'est trop compliqué … tout ce qui était besoin est quelque chose comme

 NSDate *date = [NSDate date]; int hour = [date getHour]; // which is not possible 

Existe-t-il un moyen plus simple que d'utiliser 3 classs NSDate , NSDateComponents et NSCalendar pour get l'heure courante sous la forme d'un entier, ou généralement en Objective-C, utiliserions-nous typiquement localtime et tm pour get l'heure en entier?

NSDate ne contient que le time écoulé depuis une certaine date de reference, pour get des nombres plus significatifs (par exemple, après avoir pris soin de l'heure d'été, des années bissextiles et de tous les autres trucs stupides), vous devez utiliser NSDateComponents NSCalendar .

La façon dont vous interprétez les secondes depuis 1970 dépend du calendar que vous utilisez. Il n'y a simplement pas d'autre option. Heureusement, ce n'est pas si difficile à mettre en place. Voir le «Guide de programmation des données et du time» pour de nombreux exemples. Dans ton cas:

 // Assume you have a 'date' NSCalendar *gregorianCal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; NSDateComponents *dateComps = [gregorianCal components: (NSHourCalendarUnit | NSMinuteCalendarUnit) fromDate: date]; // Then use it [dateComps minute]; [dateComps hour]; 

Donc ce n'est vraiment pas si compliqué.

Notez également que vous pouvez créer une 'Catégorie de class' pour encapsuler ceci:

  @interface NSDate (MyGregorianDateComponents) - (NSInteger) getGregorianHour; - (NSInteger) getGregorianMinute; @end 

Ma class peut aider. https://github.com/TjeerdVurig/Vurig-Calendar/blob/master/Vurig%20Calendar/NSDate%2Bconvenience.m

Je suis sûr que vous pouvez comprendre la partie minute 🙂