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