Является ли этот набор временных констант правильным или есть лучший встроенный источник в Какао
Для работы с расчетами временных интервалов на iPhone и просмотра значений некоторых компонентов.
#define kSecondsInYear 31556926
#define kSecondsInMonth 2629744
#define kSecondsInDay 86400
#define kSecondsInHour 3600
#define kSecondsInMinute 60
Я получил их от функции преобразования Google. Я округлил секунды в месяц до ближайшего int.
3 ответа
Способ обработки временных интервалов в какао заключается в NSDateComponents
, Документы хорошо освещают это в календарных расчетах. Такой подход решает большинство проблем, связанных с переходом на летнее время, которые могут мешать расчетам дат, и должен избавлять от необходимости иметь константы для всех этих различных единиц. Если они вам все еще нужны, лучший способ получить их - спросить NSCalendar
, Например:
NSRange r = [[NSCalendar currentCalendar] rangeOfUnit:NSSecondCalendarUnit
inUnit:NSYearCalendarUnit
forDate:[NSDate date]];
NSUInteger secondsInThisYear = r.length; // Does not include leap seconds
В дне 86400 секунд, если, конечно, это не високосный второй год, в этом случае в одном из дней будет 86401 секунда. 2008 был таким годом.
В году 31556926 секунд, если это не високосный второй год, в этом случае добавьте одну секунду. Если это високосный год, добавьте количество дней в день.
И, как указал sixfoottallrabbit, количество секунд в месяце варьируется в зависимости от того, будет ли это 28,29,30 или 31-дневный месяц.
Учитывая вышесказанное, я думаю, что вряд ли Cocoa определит константы для следующего, но я могу ошибаться, так как это всего лишь предположение.
- Секунды в году
- Секунды в месяце
- Секунды в день
Ну, это количество секунд в 1/12 года, а не один месяц, так как разные месяцы имеют разную продолжительность. Может ли это вызвать проблемы в вашем приложении?