NSDate - объект даты

Cocoa

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

Основы Даты

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

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

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

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

Cocoa реализует время в соответствии с Network Time Protocol (NTP) стандартом, основанном на всеобщем скоординированном времени (Coordinated Universal Time).

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

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

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

Или используют метод класса date:

NSDate *today = [NSDate date];

Если вы хотите получить какое-то время, помимо текущего, вы можете использовать один из NSDate инициализаторов initWithTimeInterval ... или методов класса dateWithTimeInterval ...

Листинг 1 Создание дат с временными интервалами

NSTimeInterval secondsPerDay = 24 * 60 * 60; // Интервал в 1 день равный 86 400 секунд
NSDate *tomorrow = [[NSDate alloc] initWithTimeIntervalSinceNow:secondsPerDay]; // Создали завтрашнюю дату
NSDate *yesterday = [[NSDate alloc] initWithTimeIntervalSinceNow:-secondsPerDay]; // Вчерашняя дата

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

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

tomorrow = [today dateByAddingTimeInterval: secondsPerDay];
yesterday = [today dateByAddingTimeInterval: -secondsPerDay];

Основные расчеты даты

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

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

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

 
 
homeЗаметили ошибкукарта сайта 
   Made on a Mac