수색…


비고

NSDate 는 보편적 인 시간의 정확한 순간을 나타내는 매우 간단한 값 유형입니다. 시간대, 일광 절약 시간, 캘린더 또는 로캘에 대한 정보는 포함되어 있지 않습니다.

NSDate 는 실제로 NSTimeInterval 주위의 불변의 래퍼이며 double 입니다. Foundation에는 다른 값 유형과 마찬가지로 변경 가능한 하위 클래스가 없습니다.

NSDate 만들기

NSDate 클래스는 주어진 날짜와 시간에 해당하는 NSDate 객체를 생성하기위한 메소드를 제공합니다. NSDate 는 지정된 초기화 프로그램을 사용하여 초기화 할 수 있습니다.

2001 년 1 월 1 일 00:00:00 UTC를 기준으로 지정된 초 단위로 초기화 된 NSDate 객체를 반환합니다.

NSDate *date = [[NSDate alloc] initWithTimeIntervalSinceReferenceDate:100.0];

NSDate 는 또한 현재 날짜와 시간과 동일한 NSDate 를 생성하는 쉬운 방법을 제공합니다 :

NSDate *now = [NSDate date];

현재 날짜와 시간에서 주어진 시간 (초) 동안 NSDate 를 생성 할 수도 있습니다 :

NSDate *tenSecondsFromNow = [NSDate dateWithTimeIntervalSinceNow:10.0];

날짜 비교

Objective-C에서 NSDate 를 비교하는 4 가지 방법이 있습니다.

  • - (BOOL)isEqualToDate:(NSDate *)anotherDate
  • - (NSDate *)earlierDate:(NSDate *)anotherDate
  • - (NSDate *)laterDate:(NSDate *)anotherDate
  • - (NSComparisonResult)compare:(NSDate *)anotherDate

2 개의 날짜, NSDate date1 = July 7, 2016NSDate date2 = July 2, 2016 사용하는 다음 예제를 고려해보십시오.

NSDateComponents *comps1 = [[NSDateComponents alloc]init];
comps.year = 2016;
comps.month = 7;
comps.day = 7;

NSDateComponents *comps2 = [[NSDateComponents alloc]init];
    comps.year = 2016;
    comps.month = 7;
    comps.day = 2;

NSDate* date1 = [calendar dateFromComponents:comps1]; //Initialized as July 7, 2016 
NSDate* date2 = [calendar dateFromComponents:comps2]; //Initialized as July 2, 2016 

NSDate 가 생성 NSDate 비교할 수 있습니다.

if ([date1 isEqualToDate:date2]) {
    //Here it returns false, as both dates are not equal
}

NSDate 클래스의 earlierDate:laterDate: 메서드를 사용할 수도 있습니다.

NSDate *earlierDate = [date1 earlierDate:date2];//Returns the earlier of 2 dates. Here earlierDate will equal date2.
NSDate *laterDate = [date1 laterDate:date2];//Returns the later of 2 dates. Here laterDate will equal date1.

마지막으로 NSDatecompare: 메서드를 사용할 수 있습니다.

NSComparisonResult result = [date1 compare:date2];
    if (result == NSOrderedAscending) {
        //Fails
        //Comes here if date1 is earlier than date2. In our case it will not come here.
    }else if (result == NSOrderedSame){
        //Fails
        //Comes here if date1 is the same as date2. In our case it will not come here.
    }else{//NSOrderedDescending
        
        //Succeeds
        //Comes here if date1 is later than date2. In our case it will come here
    }

시간과 분 (만)에서 전체 NSDate로 구성된 NSDate를 변환하십시오.

많은 사람들이 한시간 분 형식의 NSDate를 만들었습니다. 즉, 08:12

이 상황의 단점은 NSDate가 거의 완전히 "알몸"이며,이 객체가 다른 NSDate 유형과 함께 재생되도록 일, 월, 년, 초 및 시간대를 만드는 것입니다.

예를 들어, hourAndMinute가시와 분 형식으로 구성된 NSDate 유형이라고 가정 해 보겠습니다.

NSDateComponents *hourAndMintuteComponents = [calendar components:NSCalendarUnitHour | NSCalendarUnitMinute
                                                         fromDate:hourAndMinute];
NSDateComponents *componentsOfDate = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear
                                                                     fromDate:[NSDate date]];

NSDateComponents *components = [[NSDateComponents alloc] init];
[components setDay: componentsOfDate.day];
[components setMonth: componentsOfDate.month];
[components setYear: componentsOfDate.year];
[components setHour: [hourAndMintuteComponents hour]];
[components setMinute: [hourAndMintuteComponents minute]];
[components setSecond: 0];
[calendar setTimeZone: [NSTimeZone defaultTimeZone]];

NSDate *yourFullNSDateObject = [calendar dateFromComponents:components];

이제 당신의 목표는 "적나라한"것과 완전히 반대입니다.

NSDate를 NSString으로 변환

ww가 NSDate 객체를 가지고 있고 NSString으로 변환하려고합니다. 다양한 유형의 날짜 문자열이 있습니다. 우리가 어떻게 할 수 있습니까?, 아주 간단합니다. 단지 3 단계.

  1. NSDateFormatter 객체 만들기
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
  1. 문자열을 넣을 날짜 형식을 설정하십시오.
    dateFormatter.dateFormat = @"yyyy-MM-dd 'at' HH:mm";
  1. 이제 형식화 된 문자열 가져 오기

     NSDate *date = [NSDate date]; // your NSDate object
     NSString *dateString = [dateFormatter stringFromDate:date];
    

그러면 다음과 같은 결과가 2001-01-02 at 13:00 . 2001-01-02 at 13:00

노트 :

NSDateFormatter 인스턴스를 생성하는 것은 값 비싼 연산이기 때문에 한 번 생성하여 가능한 경우 다시 사용하는 것이 좋습니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow