이것은 가장 인기있는 대답이므로 약간 더 많은 정보를 포함하도록 편집하려고합니다.
그 이름에도 불구하고 그 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
.