【问题标题】:How accurate is NSTimeIntervalNSTimeInterval 的准确性如何
【发布时间】:2013-03-29 04:46:38
【问题描述】:

我正在尝试获取两个 NSDate 之间的时间差。

NSDate *d1 = somedate;
NSDate *d2 = someOtherdate;
NSTimeInterval sec = [d2 timeIntervalSinceDate:d1];

NSTimeInterval 的准确度如何? 它是否考虑到一个月中天数的变化,例如,如果天数是 28、29、30 或 31?还有时差?

【问题讨论】:

标签: ios nsdate nstimeinterval


【解决方案1】:

NSTimeInterval 的准确度如何

在我知道他们有 Cocoa 的平台上,NSTimeInterval 的类型定义为 double

它是否考虑到一个月内天数的变化?

不是NSTimeInterval 这样做,它是一个类型。是各种类(NSDate,等等)处理所有这些偏差。他们做得很好。

【讨论】:

    【解决方案2】:

    NSTimeInterval 实际上只是一个类型化的double。因为NSDate 表示单个时间点(与时区、日历等无关),所以NSTimeInterval 表示两个日期(时间点)之间的秒数。

    【讨论】:

    • 我在这里看不到任何类型转换。
    • 不,基础数据类型NSTimeInterval本身就是一个类型转换double
    • @H2CO3 对不起,我的意思是 typedef。谢谢你的收获。
    • that's not a typecast。那是一个 typedef。
    • 是的,刚刚意识到这一点。刚刚把我的术语弄混了一会儿。谢谢。
    【解决方案3】:

    NSTimeInterval 实际上只是double 的类型定义。

    NSDate封装了一个时间间隔,并提供了与之交互的接口。

    如果您希望将该日期引用到我们的实际日历,则必须使用 NSCalendarNSDateComponents 类。

    NSDateComponents *components = [[NSCalendar currentCalendar] components:NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit fromDate:[NSDate date]];
    

    然后你可以从组件对象中获取数据:

    components.day
    components.week
    // etc
    

    假设玛雅文化从未灭绝。这个正确的时刻将由同一个 NSDate 对象表示,但通过不同的NSCalendar(如NSMayanCalendar),您将获得该日期的完全不同的表示。

    【讨论】:

      【解决方案4】:

      NSTimeInterval 的准确性如何?

      精确到毫秒(如果不是更多)。

      它是否考虑到一个月中天数的变化,例如天数是 28、29、30 或 31?

      是的,差异以秒为单位。 NSDate 处理一个月中的实际天数以及闰年和夏令时等。

      还有时区差异?

      NSDate 值始终以 UTC 格式存储,因此您的 NSDate 对象始终位于同一时区。没有什么可处理的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-10-29
        • 2013-12-24
        • 2010-09-28
        • 2010-11-14
        • 1970-01-01
        • 2010-09-24
        • 1970-01-01
        相关资源
        最近更新 更多