2013-03-29 2 views
1

Я пытаюсь получить разницу во времени между двумя NSDates.Насколько точным является NSTimeInterval

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

Насколько точна NSTimeInterval? Заботится ли об изменении количества дней в месяце, например, если количество дней составляет 28,29,30 или 31? Также разница в часовых поясах?

+0

http://stackoverflow.com/questions/8387360/get-an-accurate-time-difference-between-two-nsdates .. – iPatel

ответ

1

Насколько точна NSTimeInterval?

Это точно в миллисекундах (если не больше).

Заботится ли об изменении количества дней в месяце, например, если количество дней составляет 28,29,30 или 31?

Да, разница будет в секундах. NSDate касается фактических дней в месяце, а также скачков и летних и т. Д.

Также разница в часовом поясе?

NSDate значения всегда хранятся в UTC, так что ваши NSDate объекты всегда находятся в одной и той же временной зоне. С этим ничего не поделаешь.

3

NSTimeInterval фактически является типичным double. Поскольку NSDate представляет собой единую точку во времени (независимо от часового пояса, календаря и т. Д.), NSTimeInterval представляет собой количество секунд между двумя датами (точками во времени).

+0

Я не вижу никакого типа кастинга здесь. – 2013-03-29 04:53:15

+0

Нет, основной тип данных 'NSTimeInterval' сам по себе является« double »типа. –

+0

@ H2CO3 Извините, я имел в виду typedef. Спасибо за уловку. –

3

Насколько точны NSTimeInterval

На платформах, я знаю, что они имеют какао, NSTimeInterval является typedeffed к double,

это Несет ли уход за изменением количества дней в месяц?

Это не NSTimeInterval это делает, это type. Это разные классы (NSDate, что угодно), которые заботятся обо всех этих отклонениях. И они делают это очень хорошо.

2

NSTimeInterval на самом деле всего лишь typedef для double.

NSDate инкапсулирует временной интервал и предоставляет интерфейс для взаимодействия с ним.

Если вы хотите, чтобы эта дата была привязана к нашему фактическому календарю, вы должны использовать классы NSCalendar и NSDateComponents.

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

Тогда вы можете получить данные из компонентов объекта:

components.day 
components.week 
// etc 

Предположим, что культура майя никогда не вымерли. Этот правильный момент времени будет представлен одним и тем же объектом NSDate, но через другой NSCalendar (например, NSMayanCalendar) вы получите совершенно другое представление этой даты.

Смежные вопросы