在Objective-C中,为了获得当前的小时和分钟,我们需要使用NSDateComponents和NSCalendar?

我想以整数的forms获得当前的小时和分钟。 所以如果现在是上午3:16,我想得到两个整数:3和16。

但它看起来像[NSDate date]会给[NSDate date] 1970年以来的秒数,或者它可以给出一个当前时间表示的string,但是没有简单的方法将它们作为整数?

我看到在当前时间的post,但它涉及NSDateComponentsNSCalendar ? 这太复杂了……所有需要的东西都是这样的

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

有没有比使用3类NSDateNSDateComponentsNSCalendar获取当前小时作为一个整数更简单的方法,或者通常在Objective-C中,我们通常仍然使用C语言的localtimetm来获取小时为整数?

NSDate只是持有一定的参考date以来的时间,以获得更多的有意义的数字(例如,在照顾DST,闰年和所有其他愚蠢的时间的东西),你必须使用NSDateComponents与适当NSCalendar

如何解释自1970年以来的秒数取决于您正在使用的日历。 根本没有别的select。 幸运的是,build立起来并不困难。 请参阅“数据和时间编程指南”中的大量示例。 在你的情况下:

 // 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]; 

所以它真的不那么复杂。

另外请注意,您可以创build一个“类别”来将其封装为:

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

我的class可以帮忙。 https://github.com/TjeerdVurig/Vurig-Calendar/blob/master/Vurig%20Calendar/NSDate%2Bconvenience.m

我相信你可以弄清楚分钟:)