gpt4 book ai didi

iphone - 将 NSDate 舍入到最接近的 5 分钟

转载 作者:IT老高 更新时间:2023-10-28 11:32:25 24 4
gpt4 key购买 nike

例如我有

NSDate *curDate = [NSDate date];

它的值是上午 9:13。我没有使用 curDate 的年、月和日部分。

我想得到的是时间值是 9:15 的日期;如果我有 9:16 的时间值,我想将它提前到 9:20 等等。

如何使用 NSDate 做到这一点?

最佳答案

这是我的解决方案:

NSTimeInterval seconds = round([date timeIntervalSinceReferenceDate]/300.0)*300.0;
NSDate *rounded = [NSDate dateWithTimeIntervalSinceReferenceDate:seconds];

我做了一些测试,它的速度大约是 Voss 解决方案的十倍。 1M 次迭代大约需要 3.39 秒。这一个在 0.38 秒内完成。 J3RM 的解决方案耗时 0.50 秒。内存使用量也应该是最低的。

并不是说性能就是一切,而是单线。此外,您还可以通过除法和乘法轻松控制舍入。

编辑:要回答这个问题,您可以使用 ceil 正确四舍五入:

NSTimeInterval seconds = ceil([date timeIntervalSinceReferenceDate]/300.0)*300.0;
NSDate *rounded = [NSDate dateWithTimeIntervalSinceReferenceDate:seconds];

编辑:Swift 中的扩展:

public extension Date {

public func round(precision: TimeInterval) -> Date {
return round(precision: precision, rule: .toNearestOrAwayFromZero)
}

public func ceil(precision: TimeInterval) -> Date {
return round(precision: precision, rule: .up)
}

public func floor(precision: TimeInterval) -> Date {
return round(precision: precision, rule: .down)
}

private func round(precision: TimeInterval, rule: FloatingPointRoundingRule) -> Date {
let seconds = (self.timeIntervalSinceReferenceDate / precision).rounded(rule) * precision;
return Date(timeIntervalSinceReferenceDate: seconds)
}
}

关于iphone - 将 NSDate 舍入到最接近的 5 分钟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1149256/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com