Поскольку это, по-видимому, мой самый популярный ответ, я постараюсь отредактировать его, чтобы он содержал немного больше информации.
Несмотря на свое название, 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
s). NSDateComponents
сами по себе не содержат справочной информации - это просто простые структуры, которые содержат номера для доступа к ним. Если вы хотите также получить эру, например, NSDateComponents
вам нужно передать метод генератора из NSCalendar
с NSCalendarUnitEra
флагом.