确定NSDate或时间戳的时间的最快方法是什么?

时间:2009-12-15 16:33:07

标签: iphone objective-c cocoa-touch

我需要显示一个日期,如果它不代表午夜,则需要使用NSDateFormatter显示该日期的时间。这就是我目前正在检查它是否是午夜:

int minute = [[CalendarUtil cal]ordinalityOfUnit:NSMinuteCalendarUnit
                                          inUnit:NSDayCalendarUnit forDate:date];
if (minute == 1) {
    //time is midnight
}

[CalendarUtil cal]返回一个静态对象,没有日期的时间比分钟更具体(也就是说,它总是在分钟上,+ - 0秒)。

还有更实用或更快的方法来确定这个吗?

2 个答案:

答案 0 :(得分:1)

chrisbtoo的回答很好。为了完整起见,这是另一种方法:

NSCalendar* calendar = [NSCalendar currentCalendar];
unsigned unitFlags = NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
NSDate* now = [NSDate date];
NSDateComponents* components = [calendar components:unitFlags fromDate:now];
if (([components hour] == 0) && ([components minute] == 0) && ([components second] == 0))
{
    ...
}

答案 1 :(得分:0)

NSDate免费桥接到CFDateRef,您可以使用它来获取有关日期的更多可用信息。你可以这样做:

NSDate *date;
CFDateRef dr = date;
CFAbsoluteTime at = CFDateGetAbsoluteTime(dr);
CFTimeZoneRef tr = [NSTimeZone localTimeZone];
CFGregorianDate gd = CFAbsoluteTimeGetGregorianDate(at, tr);
if ((gd.hour == 0) && (gd.minute == 0) && gd.second == 0)) {
  ...
}

这是否更快或更实用,我不知道。