Описание тега nsdate

Объекты NSDate представляют собой единый момент времени. NSDate - это кластер классов; его единственный общедоступный суперкласс NSDate объявляет программный интерфейс для конкретных и относительных значений времени. Объекты, которые вы создаете с помощью NSDate, называются объектами даты. Это неизменные объекты. Из-за природы кластеров классов объекты, возвращаемые классом NSDate, являются экземплярами не этого абстрактного класса, а одного из его частных подклассов.

Объекты NSDate представляют собой единый момент времени. NSDate - это кластер классов; его единственный общедоступный суперкласс NSDate объявляет программный интерфейс для конкретных и относительных значений времени. Объекты, которые вы создаете с помощью NSDate, называются объектами даты. Это неизменные объекты. Из-за природы кластеров классов объекты, возвращаемые классом NSDate, являются экземплярами не этого абстрактного класса, а одного из его частных подклассов. Хотя класс объекта даты является частным, его интерфейс является открытым, как объявлено абстрактным суперклассом NSDate. Как правило, вы создаете экземпляр подходящего объекта даты, вызывая один из методов класса date...

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

Единственный примитивный метод NSDate, timeIntervalSinceReferenceDate, обеспечивает основу для всех других методов в интерфейсе NSDate. Этот метод возвращает значение времени относительно абсолютной ссылочной даты - первого момента 1 января 2001 г. по Гринвичу.

Для синтаксического анализа строк, содержащих даты, и для создания строковых представлений даты следует использовать экземпляр NSDateFormatter, используя методы dateFromString: и stringFromDate: соответственно - см. Раздел " Форматирование даты" для более подробной информации.

NSDate моделирует переход от юлианского к григорианскому календарю в октябре 1582 года, и календарные вычисления, выполняемые совместно с NSCalendar, учитывают этот переход. Обратите внимание, однако, что в некоторых регионах в другое время был принят григорианский календарь; например, Великобритания не перешла на режим до сентября 1752 года.

NSDate является "мостом без телефонных звонков" со своим аналогом от Cocoa Foundation, CFDateRef. См. Раздел " Бесплатный мост" для получения дополнительной информации о бесплатном мостовом соединении.

Примечания к подклассам

Основная причина создания подкласса NSDate - создать класс с удобными методами для работы с определенной календарной системой. Но вам также может потребоваться настраиваемый класс NSDate по другим причинам, например, для получения значения даты и времени, обеспечивающего более тонкую временную детализацию. Методы переопределения

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

  • Объявите подходящую переменную экземпляра для хранения значения даты и времени (относительно абсолютной ссылочной даты).

  • Переопределите метод экземпляра timeIntervalSinceReferenceDate, чтобы указать правильные значения даты и времени на основе переменной экземпляра.

  • Переопределите initWithTimeIntervalSinceReferenceDate:, один из назначенных методов инициализатора.

Если вы создаете подкласс, представляющий календарную систему, вы также должны определить методы, которые разделяют прошлые и будущие периоды на единицы этого календаря.

Поскольку класс NSDate принимает протоколы NSCopying и NSCoding, ваш подкласс также должен реализовывать все методы в этих протоколах.

Особые соображения

Ваш подкласс может использовать контрольную дату, отличную от абсолютной контрольной даты, используемой NSDate (первый экземпляр - 1 января 2001 г., GMT). Если это так, он все равно должен использовать абсолютную контрольную дату в своих реализациях методов timeIntervalSinceReferenceDate и initWithTimeIntervalSinceReferenceDate:. То есть контрольная дата, указанная в заголовках этих методов, является абсолютной контрольной датой. Если вы не используете абсолютную ссылочную дату в этих методах, сравнения между объектами NSDate вашего подкласса и объектами NSDate частного подкласса не будут работать.