NSDate 일, 월 및 연도를 정수 형식으로 얻는 방법은 무엇입니까?


95

일, 월 및 연도 구성 요소를 NSDate정수 형식 으로 얻고 싶습니다. 즉, 날짜가 1988 년 1 월 1 일이면 1, 2 및 1988을 정수로 따로 얻어야합니다. iOS에서 어떻게 할 수 있습니까? 비슷한 질문을 찾았지만 방법 descriptionWithCalendarFormat은 경고를 표시하고 지금은 사용되지 않는 것 같습니다.


에 대해 단일 정수만 필요한 경우 NSDate를 정수로 변환을 참조하십시오 NSDate.
Suragch

답변:


223

여기 있어요,

NSDate *currentDate = [NSDate date];
NSCalendar* calendar = [NSCalendar currentCalendar];
NSDateComponents* components = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay fromDate:currentDate]; // Get necessary date components

 [components month]; //gives you month
 [components day]; //gives you day
 [components year]; // gives you year

위와 같이 NSDateComponents를 사용할 수 있습니다.

자세한 내용은 이 페이지 를 참조하십시오.

도움이되기를 바랍니다.


1
+1은 정답 코드를 제공합니다. 그러나 정보는 NSDateFormatter가 아니라 NSDateComponents에서 온다는 것을 언급해야합니다.
Black Frog 2011 년

@Black 사과드립니다. 내 대답을 업데이트했습니다.
Janak Nirmal 2011 년

1
@ Janak Nirmal Write는 사용자가 이해할 수없는 일, 월, 연도에 대한 문자열 형식을 얻는 방법을 설명 할 수없는 특정 지점입니다.
annu

1
@JanakNirmal 정확한 가치를 얻는 방법을 설명해야합니다.
annu 2015

3
지원 중단 경고를 방지하려면 : NSDateComponents * components = [calendar components : NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay fromDate : currentDate];
Rodrigo Pinto 2015

17

예, NSCalendar를 사용하면 이것이 당신의 일을 할 것이라고 생각합니다.

NSDateComponents *components = [[NSCalendar currentCalendar] components:NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit fromDate:[NSDate date]];
NSInteger day = [components day];    
NSInteger month = [components month];
NSInteger year = [components year];

13

빠른

let components = NSCalendar.currentCalendar().components([.Day, .Month, .Year], fromDate: self)
let day = components.day
let month = components.month
let year = components.year

편의상 이것을 NSDate확장에 넣고 튜플을 반환하도록 만들 수 있습니다.

extension NSDate: Comparable {

    var dayMonthYear: (Int, Int, Int) {
        let components = NSCalendar.currentCalendar().components([.Day, .Month, .Year], fromDate: self)
        return (components.day, components.month, components.year)
    }
}

이제 다음 만 작성하면됩니다.

let (day, month, year) = date.dayMonthYear

예를 들어 연도 만 얻고 싶다면 다음과 같이 작성할 수 있습니다.

let (_, _, year) = date.dayMonthYear

2
나는 당신의 접근 방식을 좋아합니다. 에 매개 변수의 이름을 변경하는 것입니다하지만 제안 (day: Int, month: Int, year: Int), 당신이 사용하여 결과를 사용할 수있는 방법 date.dayMonthYear.day, date.dayMonthYear.month, date.dayMonthYear.year.
Paul Peelen

9

NSDateComponents를 사용하여 이것을 얻을 수 있습니다.

NSCalendar *calendar = [NSCalendar autoupdatingCurrentCalendar];
NSDate *currDate = [NSDate date];
NSDateComponents *dComp = [calendar components:( NSYearCalendarUnit | NSMonthCalendarUnit |  NSDayCalendarUnit ) 
                                      fromDate:currDate];

int day = [dComp day];
int month = [dComp month];
int year = [dComp year];

8

그것을 연장하고 당신의 삶을 살아라 🍸🏖

extension Date{
    var day:Int {return Calendar.current.component(.day, from:self)}
    var month:Int {return Calendar.current.component(.month, from:self)}
    var year:Int {return Calendar.current.component(.year, from:self)}
}
Date().day//22
Date().month//4
Date().year//2017

Swift 3.0 (이전 답변의 반복이지만 향후 모든 앱 프로젝트에서 해결됨)


7

저처럼 웹에서 직접 복사하여 붙여 넣는 사람들에게 이것은 iOS 8 용 작은 업데이트입니다.

NSCalendar* calendar = [NSCalendar currentCalendar];
NSDateComponents* components = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay fromDate:[NSDate date]];
[components day]; //Day
[components month];//Month
[components year];//Year

차이점은 NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay NSMonthCalendarUnit | NSDayCalendarUnit | NSYearCalendarUnit | NSWeekdayCalendarUnit더 이상 사용되지 않습니다.


2

U는 이것을 시도 할 수 있습니다 .......

Mycal = [NSCalendar currentCalendar];
today = [NSDate date];
compA =[Mycal components:(NSMonthCalendarUnit | NSDayCalendarUnit | NSYearCalendarUnit | NSWeekdayCalendarUnit) fromDate:today];     
FirstDateofMonth=[today dateByAddingTimeInterval:([compA day]-1)*(-24*60*60)];

compA =[Mycal components:(NSMonthCalendarUnit | NSDayCalendarUnit | NSYearCalendarUnit | NSWeekdayCalendarUnit) fromDate:FirstDateofMonth];
today = FirstDateofMonth;
compA = [Mycal components:(NSMonthCalendarUnit | NSDayCalendarUnit | NSYearCalendarUnit | NSWeekdayCalendarUnit) fromDate:today];
[compA setMonth:([compA month])];
[self DrawMonthInPortraitView];
[compA retain];

1
NSDate *currentDate = [NSDate date];
NSCalendar* calendar = [NSCalendar currentCalendar];
NSDateComponents* components = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:currentDate]; // Get necessary date components

[components month]; //gives you month
[components day]; //gives you day
[components year]; // gives you year

NSString *temp=[NSString stringWithFormat:@"Months:%d Day:%d Year:%d",[components month],  [components day],[components year]];
NSLog(@"%@",temp);

1
let date = Date()
let calendar = Calendar.current

let year = calendar.component(.year, from: date)
let month = calendar.component(.month, from: date)
let day = calendar.component(.day, from: date)
print("hours = \(year):\(month):\(day)")

1
이 코드는 질문에 답할 수 있지만이 코드가 질문에 대한 이유 및 / 또는 답변 방법에 대한 추가 컨텍스트를 제공하면 장기적인 가치가 향상됩니다.
Donald Duck
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.