将“当前时间”转换为“自00:00以来的分钟数”计算帮助

时间:2009-11-30 03:46:35

标签: iphone objective-c nsdate

我没有那么多地使用过NSDate,所以我想帮助我做一些计算。

我有一个整数,从午夜开始我商店的营业时间以分钟为单位。基本上,我的商店在下午5点关闭,这给了我整数1020。

现在是下午10点45分或22点45分。从00:00开始的整数是1365,从中我可以说

if (storeHour < currentTime) {
      // closed!
}

但是,我不知道如何从“22.45”获得我从NSDate到将其转换为表示自00:00以来的时间的整数。 NSDate中有什么东西可以帮助我吗?

THX

3 个答案:

答案 0 :(得分:7)

我建议使用NSDate对象来存储商店关闭的时间,而不是使用您自己的自定义整数格式。不幸的是,NSDate代表了约会的日期和时间。

无论如何,您可以查看NSDateComponents。您可以使用以下实用程序方法:

int minutesSinceMidnight:(NSDate *)date
{
    NSCalendar *gregorian = [[NSCalendar alloc]
        initWithCalendarIdentifier:NSGregorianCalendar];
    unsigned unitFlags =  NSHourCalendarUnit | NSMinuteCalendarUnit;
    NSDateComponents *components = [gregorian components:unitFlags fromDate:date];

    return 60 * [components hour] + [components minute];    
}

答案 1 :(得分:3)

@notnoop回复的快速版本:

func minutesSinceMidnight(start : NSDate) -> Int {

    let units : NSCalendarUnit = [.Hour, .Minute]
    let components = NSCalendar.currentCalendar().components(units, fromDate: start)
    return 60 * components.hour + components.minute
}

答案 2 :(得分:1)

如果你有另一个NSDate设置为午夜,那么你可以使用NSDate对象的timeIntervalSinceDate方法来获得NSTimeInterval两个之间的差异。或者,如果您总是希望将午夜与当前时间进行比较,则可以在午夜NSDate上调用timeIntervalSinceNow方法,然后您将获得NSTimeInterval返回(虽然为负数)午夜和当前时间。

NSTimeInterval被标准定义为double,其持有若干秒(以及任何小数秒)。