5

我想将当前的小时和分钟作为整数。所以如果现在是凌晨 3:16,我想得到两个整数:3 和 16。

但它看起来[NSDate date]会给出自 1970 年以来的秒数,或者它可以给出当前时间表示的字符串,但没有简单的方法将它们作为整数获取?

我在获取当前时间中看到了一篇文章,但它涉及到NSDateComponentsNSCalendar?这太复杂了......所需要的只是

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

有没有比使用 3 个类NSDate,NSDateComponentsNSCalendar以整数形式获取当前小时数的更简单的方法,或者通常,在 Objective-C 中,我们通常仍会使用 C 语言localtimetm以整数形式获取小时数吗?

4

3 回答 3

17

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

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

所以它真的没有那么复杂。

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

 @interface NSDate (MyGregorianDateComponents)
  - (NSInteger) getGregorianHour;
  - (NSInteger) getGregorianMinute;
  @end
于 2012-06-02T10:32:24.190 回答
9

NSDate只保留自某个参考日期以来经过的时间,以便从中获得更有意义的数字(例如,在处理 DST、闰年和所有其他愚蠢的时间之后),您必须使用NSDateComponents适当的NSCalendar.

于 2012-06-02T10:17:59.510 回答
1

我的班级可以提供帮助。 https://github.com/TjeerdVurig/Vurig-Calendar/blob/master/Vurig%20Calendar/NSDate%2Bconvenience.m

我相信你能弄清楚那一分钟:)

于 2012-06-02T12:35:12.770 回答