iPhone OS : 특정 날짜에 대한 NSDate를 어떻게 생성합니까?


답변:


211

@Chuck의 대답이 정확하고 다음 코드로 연결됩니다. 공유 할 생각 :

NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setDay:10];
[comps setMonth:10];
[comps setYear:2010];
NSDate *date = [[NSCalendar currentCalendar] dateFromComponents:comps];

7
참고도 있습니다 setHour, setMinute, setSecond미세한 입도를 들어, 등.
devios1 2013-07-05

19

이것을 사용할 수 있습니다

NSString *dateString = @"03-Sep-11";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat = @"dd-MMM-yy";
NSDate *date = [dateFormatter dateFromString:dateString];

이것이 당신을 도울 수 있기를 바랍니다.


"dateFromString"함수를 사용하는 데주의하십시오. 완벽하게 유효한 날짜가 있으면 비참하게 실패한다는 것을 알았습니다. 날짜 문자열을 구문 분석하는 다른 방법은 아래 내 게시물을 참조하십시오.
Mike Gledhill

Oded Ben이 언급하는 또 다른 가장 좋은 방법입니다 ..... NSDateComponents * comps = [[NSDateComponents alloc] init]; [comps setDay : 10]; [comps setMonth : 10]; [comps setYear : 2010]; NSDate * date = [[NSCalendar currentCalendar] dateFromComponents : comps];
Kamleshwar

16

UNIXy 날짜가 아닌 특정 달력 날짜에 대해 이야기하는 경우 NSCalendar의 dateFromComponents:.


9

Swift 예제

예는 종종 배우는 가장 쉬운 방법입니다. 다음은 몇 가지 예입니다.

지금

이것은 가장 쉬운 방법입니다.

let currentDateTime = Date()

2017 년 2 월 20 일

// Specify date components
var dateComponents = DateComponents()
dateComponents.year = 2017
dateComponents.month = 2
dateComponents.day = 20

// Create date from components
let userCalendar = Calendar.current // user calendar
let dateThisPostWasUpdated = userCalendar.date(from: dateComponents)

1976 년 4 월 1 일

// Specify date components
var dateComponents = DateComponents()
dateComponents.year = 1976
dateComponents.month = 4
dateComponents.day = 1

// Create date from components
let userCalendar = Calendar.current // user calendar
let appleFoundedDate = userCalendar.date(from: dateComponents)

더 자세한 정보가 필요하십니까 ...?

날짜를 만드는 다른 방법도 있습니다. 날짜 를 표시 하는 방법뿐만 아니라 그 내용을 배우고 싶다면 더 자세한 답변참조하십시오 .


8

NSDate에 대한 문서를 참조하십시오 . 의 dateFromString:방법 NSDateFormatter또는의 dateFromComponents:방법을 사용할 수 있습니다 NSCalendar.


나는이 날짜를 계속 얻는다 : "1969-12-31 16:00:00"-0800 문자열에서 날짜를 사용할 때
nickthedude 2010

NSDateFormatter * dateFormatter = [[NSDateFormatter 할당] init]; NSDate * capturedStartDate = [dateFormatter dateFromString : @ "2001 년 1 월 2 일"]; NSLog (@ "% @", [capturedStartDate 설명]); 출력 : 2010-04-05 10 : 49 : 47.688 Calendar2 [21339 : 207] 1969-12-31 16:00:00 -0800
nickthedude 2010

평범한 대신 형식이 지정된 날짜에 몇 가지 매개 변수를 설정해야 할 수도 있습니다 init.
zoul 2010

3

이 질문에 대한 답을 찾는 동안이 스레드를 찾았지만 Big Nerd Ranch Objective-C Programming 책에서 좋은 예를 찾았습니다. 내가 아니라 그들에 대한 신용.

  NSDateComponents *myBDay  =[[NSDateComponents alloc] init];
    [myBDay setDay:22];
    [myBDay setMonth: 04];
    [myBDay setYear: 1984];
    [myBDay setHour:9];
    [myBDay setMinute:25];
    [myBDay setSecond:35];

    NSCalendar *g = [[ NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
    NSDate *dateOfBirth = [g dateFromComponents:myBDay];

2

말도 안되죠?

2013 년 중반과 Apple은 여전히 NSDate 값을 설정하는 간단한 방법을 제공하지 않았습니다.

현재 iPad 프로젝트에서 NSDate에서 Year 값을 얻기 위해 나만의 도우미 클래스를 작성하기 위해 잠시 동안 생산성을 멈춰야한다는 것을 믿을 수 없었습니다. 제 말은, 이건 기본적인 것입니다.

어쨌든, 여기에 문자열을 NSDate 값으로 변환하기 위해 프로젝트에서 사용한 도우미 클래스가 있습니다.

@implementation DateHelper

+(NSDate*)parseDateString:(NSString *)dateString
{
    NSDateFormatter *rfc3339TimestampFormatterWithTimeZone = [[NSDateFormatter alloc] init];
    [rfc3339TimestampFormatterWithTimeZone setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]];
    [rfc3339TimestampFormatterWithTimeZone setDateFormat:@"MMM dd, yyyy"];

    NSDate *theDate = nil;
    NSError *error = nil;
    if (![rfc3339TimestampFormatterWithTimeZone getObjectValue:&theDate forString:dateString range:nil error:&error]) {
        NSLog(@"Date '%@' could not be parsed: %@", dateString, error);
    }

    return theDate;
}

@end

이 코드를 사용하면 다음과 같이 NSDate 값을 설정할 수 있습니다.

NSDate* date = [DateHelper parseDateString:@"Jul 16, 2013"];

참고 :이 함수는 https://stackoverflow.com/a/3968411/391605 에서 가져온 코드를 기반으로합니다.

내 해결책 다음 코드를 사용하는 것이었지만 때로는 파싱하지 않고 nil 을 반환 한다는 것을 발견했습니다 .

//  Take a date string in the format "Oct 23, 2013", and convert it into a NSDate value
//  THIS DOESN'T WORK !  DON'T TRUST THIS CODE !!
NSDateFormatter* formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"MMM dd, yyyy"];
[formatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];

NSDate* date = [formatter dateFromString:dateString];

나는 그것이 "2012 년 10 월 12 일"에 비참하게 실패한 것을 기억한다. 이것이 내가 포기하고 위에 표시된 더 복잡한 "parseDateString"함수를 사용한 이유이다.

내 요점은 ... 조심해.

매우 기본적인 NSDate 함수 중 일부가 제대로 작동하지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.