在NS中将NSdate舍入到最接近的小时

Sum*_*tel 6 iphone nsdate nscalendar nsdatecomponents ios

我有格式的数据

时间:13:52,10:30,11:48

等等

我想绕到最近的一小时.

比如13:52 - > 14:00,10:30 - > 11:00和11:48 - > 12:00.

我怎么能用NSDate做到这一点?

Lit*_*T.V 8

使用此方法

- (NSDate*) nextHourDate:(NSDate*)inDate{
    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSDateComponents *comps = [calendar components: NSEraCalendarUnit|NSYearCalendarUnit| NSMonthCalendarUnit|NSDayCalendarUnit|NSHourCalendarUnit fromDate: inDate];
    [comps setHour: [comps hour]+1]; //NSDateComponents handles rolling over between days, months, years, etc
    return [calendar dateFromComponents:comps];
}
Run Code Online (Sandbox Code Playgroud)

这将为您提供inDate下一小时的日期


Col*_*ett 8

这是一个Swift 3.0实现,使用Date扩展名获取最近的小时:

extension Date {
    func nearestHour() -> Date? {
        var components = NSCalendar.current.dateComponents([.minute], from: self)
        let minute = components.minute ?? 0
        components.minute = minute >= 30 ? 60 - minute : -minute
        return Calendar.current.date(byAdding: components, to: self)
    }
}
Run Code Online (Sandbox Code Playgroud)