除了输入和功能输出,是有什么区别NSDate
的
func timeIntervalSinceDate(anotherDate: NSDate) -> NSTimeInterval
和NSCalendar
的
func components(unitFlags: NSCalendarUnit, fromDate startingDate: NSDate, toDate resultDate: NSDate, options opts: NSCalendarOptions) -> NSDateComponents
?
哪个功能更精确?哪些功能考虑了夏令时,leap秒等?
例如:
let today = NSDate()
let someDate = RandomFutureDate() // Assumes this gives random future date
let seconds = futureDate.timeIntervalSinceDate(today)
let anotherSeconds = NSCalendar.currentCalendar().components(.CalendarUnitSecond, fromDate: today, toDate: futureDate, options: nil).second
哪个更准确/正确,seconds
还是anotherSeconds
?
注意:seconds
由于它是双精度值,因此看起来似乎更准确,但是它是否考虑了DST,leap秒等?
它不是一个更准确/准确的方法。他们做不同的事情。
timeIntervalSinceDate方法为您提供了两个日期之间的秒数差的原始计算,而无需尝试将其分为常规单位,例如分钟和秒。我想timeIntervalSinceDate会更精确,因为它可以在几分之一秒内为您提供答案,且精度为亚毫秒。
您的第二个版本使用日历对象来计算两个日期之间的整数秒数。该版本可用于计算两个日期之间的年,月,周,天等的数量,并且对于“日历计算”非常有用。显然,在您的示例中,您仅要求整秒差的数量。
正如Martin R在下面的评论中指出的那样,您可以稍微调整日历代码,并使用CalendarUnitNanosecond从NSCalendar获得非常精确的分数秒。
自OS X / iOS的“新纪元”以来,NSDates实际上只是围绕秒数计数的一个薄包装。timeIntervalSinceDate方法将实现闪电般的快速,因为它只是在做一个简单的浮点减法。
相比之下,使用NSCalendar和NSDateComponents的代码可能非常复杂,因此执行起来较慢。这种计算必须考虑到不同的日历系统,每月不同的天数,leap年以及许多其他极端情况。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句