Cocoa touch 这组时间常数是正确的还是Cocoa中有更好的内置源

Cocoa touch 这组时间常数是正确的还是Cocoa中有更好的内置源,cocoa-touch,time,sanity-check,Cocoa Touch,Time,Sanity Check,用于在iPhone上处理时间间隔计算和查看某些组件值 #define kSecondsInYear 31556926 #define kSecondsInMonth 2629744 #define kSecondsInDay 86400 #define kSecondsInHour 3600 #define kSecondsInMinute 60 我从谷歌的转换功能中得到了这些。我把月份的秒数四舍五入到最接近的整数。这是一年中1/12的秒数,而不是一个月,因为不同的月份长度不同。这会导致应用程

用于在iPhone上处理时间间隔计算和查看某些组件值

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

我从谷歌的转换功能中得到了这些。我把月份的秒数四舍五入到最接近的整数。

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

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

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

正如sixfoottallrabbit所指出的,一个月的秒数取决于它是28天、29天、30天还是31天

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

  • 一年中的秒数
  • 一个月几秒钟
  • 一天几秒钟

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

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

只要在过去70年中误差小于2小时,我就很好。