代码之家  ›  专栏  ›  技术社区  ›  Ed Marty

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

  •  1
  • Ed Marty  · 技术社区  · 15 年前

    我需要显示一个日期,如果它不代表午夜,则使用 NSDateFormatter

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

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

    有没有更实用或更快的方法来确定这一点?

    2 回复  |  直到 15 年前
        1
  •  0
  •   chrisbtoo    15 年前

    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)) {
      ...
    }
    

    我不知道这是更快还是更实用。

        2
  •  1
  •   Shaggy Frog    15 年前

    克里斯布图的回答很好。为了完整起见,这里有另一种方法:

    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))
    {
        ...
    }