NSDate的timeIntervalSinceDate(_ :)和NSCalendar的组件的差异(_:fromDate:toDate:options :)

克里斯娜曼斯

除了输入和功能输出,是有什么区别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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

NSCalendar [_NSCopyOnWriteCalendarWrapper组件:fromDate:]:错误

来自分类Dev

Swift NSDate和打印(NSDate)

来自分类Dev

SQL查询使fromDate和toDate?

来自分类Dev

CorePlot CPTAxisLabelingPolicyAutomatic和NSDate

来自分类Dev

根据fromdate和todate包括exclude年

来自分类Dev

在Swift中使用NSDate组件

来自分类Dev

比较服务器中的nsdate和本地的nsdate

来自分类Dev

如何在Swift中分隔NSDate()的日期和时间组件?

来自分类Dev

如何在Swift中分隔NSDate()的日期和时间组件?

来自分类Dev

从FromDate和ToDate列表构造动态where'Between'子句

来自分类Dev

SQL Server查询以获取fromdate和todate之间的值以及fromdata,todate之间的值

来自分类Dev

如何处理[NSDate]和Firebase

来自分类Dev

Swift和ObjectMapper:NSDate(最小值)

来自分类Dev

如何从NSUserDefaults检索和分配NSDate对象?

来自分类Dev

从月,日和年创建NSDate

来自分类Dev

昨天12:00和今晚获取NSDate

来自分类Dev

当我们将 NSDate 转换为 NSDate 组件时,NSDateComponents 的值是错误的

来自分类Dev

如何使用RestKit将日期组件字典映射到NSDate

来自分类Dev

通过在MySQL中传递单个日期来检索具有fromdate和todate的记录

来自分类Dev

如何使用Spring Boot验证getDate中的fromDate和toDate是否存在

来自分类Dev

SQL - 将一个日期列转换为 FromDate 和 ToDate 列

来自分类Dev

比较两个NSDate的月份和日期

来自分类Dev

仅一台设备和NSDate的奇怪行为

来自分类Dev

Objective-C:如何从NSDate获取日期和日期?

来自分类Dev

NSDate零时分和秒

来自分类Dev

Swift:使用strftime和localtime进行NSDate格式化

来自分类Dev

从NSDate对象获取UTC时间和本地时间

来自分类Dev

Swift NSDate仅使用小时和分钟创建var

来自分类Dev

NSDictionary的组和总和值,按月,其中键为NSDate

Related 相关文章

  1. 1

    NSCalendar [_NSCopyOnWriteCalendarWrapper组件:fromDate:]:错误

  2. 2

    Swift NSDate和打印(NSDate)

  3. 3

    SQL查询使fromDate和toDate?

  4. 4

    CorePlot CPTAxisLabelingPolicyAutomatic和NSDate

  5. 5

    根据fromdate和todate包括exclude年

  6. 6

    在Swift中使用NSDate组件

  7. 7

    比较服务器中的nsdate和本地的nsdate

  8. 8

    如何在Swift中分隔NSDate()的日期和时间组件?

  9. 9

    如何在Swift中分隔NSDate()的日期和时间组件?

  10. 10

    从FromDate和ToDate列表构造动态where'Between'子句

  11. 11

    SQL Server查询以获取fromdate和todate之间的值以及fromdata,todate之间的值

  12. 12

    如何处理[NSDate]和Firebase

  13. 13

    Swift和ObjectMapper:NSDate(最小值)

  14. 14

    如何从NSUserDefaults检索和分配NSDate对象?

  15. 15

    从月,日和年创建NSDate

  16. 16

    昨天12:00和今晚获取NSDate

  17. 17

    当我们将 NSDate 转换为 NSDate 组件时,NSDateComponents 的值是错误的

  18. 18

    如何使用RestKit将日期组件字典映射到NSDate

  19. 19

    通过在MySQL中传递单个日期来检索具有fromdate和todate的记录

  20. 20

    如何使用Spring Boot验证getDate中的fromDate和toDate是否存在

  21. 21

    SQL - 将一个日期列转换为 FromDate 和 ToDate 列

  22. 22

    比较两个NSDate的月份和日期

  23. 23

    仅一台设备和NSDate的奇怪行为

  24. 24

    Objective-C:如何从NSDate获取日期和日期?

  25. 25

    NSDate零时分和秒

  26. 26

    Swift:使用strftime和localtime进行NSDate格式化

  27. 27

    从NSDate对象获取UTC时间和本地时间

  28. 28

    Swift NSDate仅使用小时和分钟创建var

  29. 29

    NSDictionary的组和总和值,按月,其中键为NSDate

热门标签

归档