Оскільки це, мабуть, моя найпопулярніша відповідь, я спробую відредагувати її, щоб вона містила трохи більше інформації.
Незважаючи на свою назву, саме 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надати цю інформацію разом із NSCalendarUnits). NSDateComponentsне містять по собі довідкової інформації - вони просто прості структури, які містять номери для доступу до вас. Якщо ви також хочете отримати епоху, наприклад, поза NSDateComponents, вам доведеться подати метод генератора NSCalendarз NSCalendarUnitEraпрапором.