6

我没有太多地使用 NSDate,所以我想要一些关于我正在做的计算的帮助。

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

所以现在是晚上 10.45 或 22.45。从 00:00 开始的整数是 1365,由此我可以说

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

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

谢谢

4

5 回答 5

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];    
}
于 2009-11-30T04:01:53.467 回答
4

Swift 5 This for exemple gives you the current number of minutes since midnight

let calendar = Calendar.current
let now = Date()

print(getMinutesSinceMidnight())

func getMinutesSinceMidnight() -> Int {
        return (calendar.component(.hour, from: now) * 60 + calendar.component(.minute, from: now))
 }
于 2020-01-20T16:18:42.473 回答
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
}
于 2016-01-07T00:10:13.550 回答
1

如果您有另一个NSDate设置为午夜,那么您可以使用timeIntervalSinceDateNSDate 对象的方法来获取NSTimeInterval两者之间的差异。或者,如果您总是想将午夜与当前时间进行比较,您可以timeIntervalSinceNow在午夜 NSDate 上调用该方法,您会得到NSTimeInterval午夜与当前时间之间的差异(尽管是负数)。

NSTimeInterval由标准定义为 a double,它包含秒数(和任何小数秒)。

于 2009-11-30T03:56:45.923 回答
0

这是一种现代方式,无需任何额外的数学运算。

Objective-C

NSCalendar *calendar = [NSCalendar currentCalendar];
NSDate *midnight = [calendar startOfDayForDate:[NSDate date]];
NSInteger minutesSinceMidnight = [calendar components:NSCalendarUnitMinute fromDate:midnight toDate:[NSDate date] options:0].minute;

Swift 3+作为Date扩展

extension Date {
    func minutesSinceMidnight() -> Int {
        let calendar = Calendar.current
        let midnight = calendar.startOfDay(for: self)
        return calendar.dateComponents([.minute], from: midnight, to: self).minute!
    }
}

用法:

print(Date().minutesSinceMidnight())
于 2020-01-20T17:00:29.447 回答