Даты

Объекты даты позволяют Вам представлять даты и время в пути, который может использоваться для вычислений даты и преобразований. Как абсолютные моменты времени, объекты даты значимы через локали, часовые пояса и календари.

Основные принципы даты

Какао представляет даты и время как NSDate объекты. NSDate один из фундаментальных объектов значения Какао. Объект даты представляет инвариантный момент времени. Поскольку дата является моментом времени, она подразумевает, показывают время, а также день, таким образом, нет никакого способа определить объект даты представлять день без времени.

Чтобы понять, как Какао обрабатывает даты, необходимо рассмотреть NSCalendar и NSDateComponents объекты также. В нетехническом контексте момент времени обычно представляется комбинацией времени часов и дня на определенном календаре (таком как Грегорианский или еврейский календарь). Поддержка различных календарей важна для локализации. В Какао Вы используете определенный календарь для разложения объекта даты в его компоненты даты, такие как год, месяц, день, час и минута. С другой стороны можно использовать календарь для создания объекта даты из компонентов даты. Календарь и компонентные объекты даты описаны более подробно в Календарях, Компонентах Даты и Единицах времени по календарю.

NSDate обеспечивает методы для создания дат, сравнения дат и вычислительных интервалов. Объекты даты являются неизменными. Стандартная единица времени для объектов даты является значением с плавающей точкой, введенным как NSTimeInterval и выражен в секундах. Этот тип делает возможным широкий и тонкозернистый диапазон значений даты и времени, давая точность в миллисекундах для дат на расстоянии в 10 000 лет.

NSDate вычисляет время как секунды относительно времени абсолютной ссылки: первый момент от 1 января 2001, Среднее время по Гринвичу (GMT). Даты к тому времени сохранены как отрицательные числа; даты после тогда сохранены как положительные числа. Единственный примитивный метод NSDate, timeIntervalSinceReferenceDate обеспечивает основание для всех других методов в NSDate интерфейс. NSDate преобразовывает все представления даты и времени и от NSTimeInterval значения, которые являются относительно даты абсолютной ссылки.

Какао реализует время согласно стандарту Протокола сетевого времени (NTP), основывающемуся на Всемирном координированном времени.

Создание объектов даты

Если Вы хотите дату, представляющую текущее время, Вы выделяете NSDate возразите и инициализируйте его с init:

NSDate *now = [[NSDate alloc] init];

или используйте NSDate метод класса date создать объект даты. Если Вы хотите некоторое время кроме текущего времени, можно использовать один из NSDate initWithTimeInterval... или dateWithTimeInterval... методы; обычно, однако, Вы используете более сложный подход, использующий календарь и компоненты даты, как описано в Календарных Основах.

initWithTimeInterval... методы инициализируют объекты даты относительно определенного времени, которое описывает имя метода. Вы указываете (в секундах), сколько еще недавний или сколько еще в прошлом Вы хотите свой объект даты быть. Для указания даты, происходящей ранее, чем базисная дата метода используйте отрицательное число секунд.

Перечисление 1 определяет два объекта даты. tomorrow объект является точно 24 часами до текущей даты и время, и yesterday точно на 24 часа ранее, чем текущая дата и время.

Перечисление 1  , Создающее даты с временными интервалами

NSTimeInterval secondsPerDay = 24 * 60 * 60;
NSDate *tomorrow = [[NSDate alloc]
            initWithTimeIntervalSinceNow:secondsPerDay];
NSDate *yesterday = [[NSDate alloc]
            initWithTimeIntervalSinceNow:-secondsPerDay];
[tomorrow release];
[yesterday release];

Перечисление 2 показывает, как получить новые объекты даты со значениями даты и времени, скорректированными от существующего использования объектов даты dateByAddingTimeInterval:.

Перечисление 2  , Создающее даты путем добавления временного интервала

NSTimeInterval secondsPerDay = 24 * 60 * 60;
NSDate *today = [[NSDate alloc] init];
NSDate *tomorrow, *yesterday;
 
tomorrow = [today dateByAddingTimeInterval: secondsPerDay];
yesterday = [today dateByAddingTimeInterval: -secondsPerDay];
[today release];

Основные вычисления даты

Для сравнения дат можно использовать isEqualToDate:, compare:, laterDate:, и earlierDate: методы. Эти методы выполняют точные сравнения, что означает, что они обнаруживают подвторые различия между датами. Можно хотеть сравнить даты с меньшим количеством мелкоячеистости. Например, можно хотеть считать две даты равными, если они в течение минуты друг после друга. Если это верно, использовать timeIntervalSinceDate: сравнить эти две даты. Следующий фрагмент кода показывает, как использовать timeIntervalSinceDate: видеть, ли две даты в течение одной минуты (60 секунд) друг друга.

if (fabs([date2 timeIntervalSinceDate:date1]) < 60) ...

Для получения различия между объектом даты и другим моментом времени отправьте a timeIntervalSince... обменивайтесь сообщениями к объекту даты. Например, timeIntervalSinceNow дает Вам время, в секундах, между текущим временем и объектом даты получения.

Получить элементы компонента даты, такие как день недели, использование NSDateComponents объект в сочетании с NSCalendar объект. Этот метод описан в Календарных Основах.