这组时间常量是否正确,或者Cocoa中是否有更好的内置源

时间:2009-08-06 11:35:04

标签: cocoa-touch time sanity-check

用于在iPhone上使用时间间隔计算并查看某些组件值。

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

我从Google的转换功能中获得了这些功能。我将Month中的Seconds舍入到最接近的int。

3 个答案:

答案 0 :(得分:1)

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

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

正如sixfoottallrabbit指出的那样,一个月内的秒数取决于是否是28,29,30或31个月。

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

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

答案 1 :(得分:0)

嗯,这是一年中1/12的秒数,而不是一个月,因为不同的月份是不同的长度。这会导致您的申请出现问题吗?

答案 2 :(得分:0)

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

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