Поскольку это, по-видимому, мой самый популярный ответ, я постараюсь отредактировать его, чтобы он содержал немного больше информации.
Несмотря на свое название, NSDate
само по себе просто обозначает точку в машиневремя, а не свиданиеНет корреляции между моментом времени, указанным NSDate
, и годом, месяцем или днемДля этого вам нужно обратиться к календарю.Любой данный момент времени будет возвращать различную информацию о дате в зависимости от того, какой календарь вы просматриваете (например, даты не совпадают в григорианском и еврейском календарях), а григорианский календарь является наиболее широко используемым календарем вМир - я предполагаю - мы немного предвзяты, что NSDate
всегда должен его использоватьNSDate
, к счастью, гораздо более двухпартийен.
Получение даты и времени должно пройти через NSCalendar
, как вы упоминали, но есть более простой способ сделать это:
NSDateComponents *components = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear fromDate:[NSDate date]];
Создает объект NSDateComponents
, содержащий день, месяц и год из текущего системного календаря на текущий день.( Примечание: это не обязательно текущий указанный пользователем календарь, просто системный календарь по умолчанию.)
Конечно, если вы используете другойкалендарь или дата, вы можете легко изменить это.Список доступных календарей и календарных единиц можно найти в NSCalendar
Ссылка на класс .Более подробную информацию о NSDateComponents
можно найти в NSDateComponents
Справочнике классов .
Для справки, доступ к отдельным компонентам из NSDateComponents
довольно прост:
NSInteger day = [components day];
NSInteger month = [components month];
NSInteger year = [components year];
Вам просто нужно помнить: NSDateComponents
не будет содержать действительную информацию для любых полей, которые вы запрашиваете, если вы не сгенерировали их с этой действительной информацией (т.е. запрос NSCalendar
, чтобы предоставить эту информацию с NSCalendarUnit
с).NSDateComponents
сами по себе не содержат справочной информации - это просто простые структуры, которые содержат номера для доступа к ним.Если вы также хотите получить эпоху, например, из NSDateComponents
, вам нужно передать метод генератора из NSCalendar
с флагом NSCalendarUnitEra
.