【问题标题】:Is this set of time constants correct or is there a better built-in source in Cocoa这组时间常数是正确的还是 Cocoa 中有更好的内置源
【发布时间】:2009-08-06 11:35:04
【问题描述】:

用于在 iPhone 上进行时间间隔计算并查看一些组件值。

#define kSecondsInYear 31556926
#define kSecondsInMonth 2629744
#define kSecondsInDay 86400
#define kSecondsInHour 3600
#define kSecondsInMinute 60

这些是我从 Google 的转换功能中得到的。我将月份中的秒数四舍五入到最接近的整数。

【问题讨论】:

    标签: cocoa-touch time sanity-check


    【解决方案1】:

    一天有 86400 秒,当然除非是 leap second year,在这种情况下一天有 86401 秒。 2008年就是这样的一年。

    一年有 31556926 秒,除非是闰年,在这种情况下加一秒。如果是闰年,则增加一天的秒数。

    正如 Sixfoottallrabbit 指出的那样,一个月的秒数取决于它是 28、29、30 还是 31 天的月份。

    鉴于上述情况,我认为 Cocoa 不太可能为以下内容定义常量,但我可能错了,因为这只是一个猜测。

    • 一年中的秒数
    • 一个月内的秒数
    • 一天之内的秒数

    【讨论】:

      【解决方案2】:

      在 Cocoa 中处理时间间隔计算的方法是使用NSDateComponentsCalendrical Calculations 中的文档很好地涵盖了这一点。这样做可以处理大多数可能困扰日期计算的夏令时问题,并且应该避免为所有这些不同的单位设置常量。如果您仍然需要它们,获得它们的最佳方式是询问NSCalendar。例如:

      NSRange r = [[NSCalendar currentCalendar] rangeOfUnit:NSSecondCalendarUnit 
                                                inUnit:NSYearCalendarUnit 
                                                forDate:[NSDate date]];
      NSUInteger secondsInThisYear = r.length; // Does not include leap seconds
      

      【讨论】:

        【解决方案3】:

        嗯,这是一年中 1/12 的秒数,不完全是一个月,因为不同月份的长度不同。这会导致您的应用程序出现问题吗?

        【讨论】:

        • 过去70年只要误差小于2小时左右就可以了。
        猜你喜欢
        • 2016-06-19
        • 2014-01-03
        • 2011-07-03
        • 2012-08-19
        • 1970-01-01
        • 1970-01-01
        • 2012-03-12
        • 2011-04-14
        • 1970-01-01
        相关资源
        最近更新 更多