2010-08-19 5 views
10

나는 평일을 nsdate에서 얻을 수 있어야합니다. 다음 코드를 가지고 있습니다. 항상 1을 반환합니다. 나는 1 월 12 일까지 모든 것을 시도했지만, 주일 결과는 항상 1입니다. Mac 용목표 C - NSDate에서 평일을 어떻게 얻을 수 있습니까?

NSDate *date2 = [[NSDate alloc] initWithString:[NSString stringWithFormat:@"%d-%d-%d", 2010, 6, 1]]; 
unsigned units2 = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSWeekdayCalendarUnit; 
NSCalendar *calendar2 = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
NSDateComponents *components2 = [calendar2 components:units2 fromDate:date2]; 
int startWeekDay = [components2 weekday]; 
[date2 release]; 
[calendar2 release]; 
+0

가능한 복제본 [어떻게하면 Cocoa Touch로 요일을 잡을 수 있습니까?] (http://stackoverflow.com/questions/4269093/how-do-i-get-the-day-of-the- week-with-cocoa-touch) – Suhaib

답변

6

편집 :

문자열의 형식은 -YYYY-MM-DD HH 을 수있다 : MM : HHMM ± SS 워드 프로세서에 따르면, 모든 분야의 필수

이전 답변 (아이폰 및 시뮬레이터에서 테스트) r은 :

NSDate에는 (공개) -initWithString: 방법도없고, 당신이 반환받을 것은 당신이 무엇을 기대 하지입니다.

적절하게 구성된 입력 형식을 사용하십시오 (NSDateFormatter-dateFromString:).

+0

예 - initWithString : 내 문제는 제 문자열의 형식입니다 – aryaxt

+0

아, 죄송합니다. NSDate가 부족합니다. 내 대답을 편집 ... – Eiko

43

평일 만 포함하는 NSDateFormatter을 만들면 원하는 작업을 수행 할 수 있습니다. 당신이 국제화가 필요한 경우

NSDate *now = [NSDate date]; 
NSDateFormatter *weekday = [[[NSDateFormatter alloc] init] autorelease]; 
[weekday setDateFormat: @"EEEE"]; 
NSLog(@"The day of the week is: %@", [weekday stringFromDate:now]); 

NSDateFormatter 적절한 번역을 줄 것이다 로케일을 보낼 수 있습니다.

날짜 포맷터

이 표준을 통해 제어된다 : 나는 문제를 해결 Unicode Date Formats

+0

OP는 요일의 정수를 원한다고 생각합니다 (예 : 1 = 월요일, 2 = 화요일, 3 = 수요일 등). – dreamlax

+0

네, 그게 제가 찾고 있던 것입니다 – aryaxt

+2

만약 당신이 정수를 원한다면 : [weekday setDateFormat : @ "e"]; 또한 NSLocale을 설정해야합니다. 예 : NSLocale * deLocale = [[[NSLocale alloc] initWithLocaleIdentifier : @ "de_DE"] autorelease]; [평일 setLocale : deLocale]; 그렇지 않으면 주일의 시작 요일이 일요일 또는 월요일 인 경우 목요일이 4 대신 5 일 수 있습니다. –

0

, 문제는 내 날짜 문자열의 형식이 잘못이었다 :

NSDate *date = [[NSDate alloc] initWithString:[NSString stringWithFormat:@"%d-%d-%d 10:45:32 +0600", selectedYear, selectedMonth, selectedDay]]; 

및 이후에게 난 상관 없어 시간에 대해 내가 무작위로 내가

가 설치 NS 많은 방법이있다 엑스 코드 6.4을 사용하고

0

문자열의 마지막에 시간을 통과 날짜. 나는 여기에 가지 않을 것이다. 한 방법으로 문자열을 사용했습니다 (오류가 발생하기 쉽지 않기 때문에이 방법을 사용하지 마십시오), 다른 방법으로 설정하고 있습니다. 그럼에도 불구하고 요일 구성 요소 또는 setDay 메소드에 액세스하십시오. 물론, 당신은 구성 요소를 변경 한 후에 만 ​​NSDate *date = [calendar dateFromComponents:components];을 설정

[components weekday] //to get, then doSomething 
[components setDay:6]; //to set 

과 :

NSCalendar *calendar = [NSCalendar autoupdatingCurrentCalendar]; 
[calendar setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en-US"]]; 
NSDateComponents *components = [calendar components:(NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitWeekday|NSCalendarUnitDay|NSCalendarUnitHour|NSCalendarUnitMinute|NSCalendarUnitSecond) fromDate:[NSDate date]]; 
    NSDate *date = [calendar dateFromComponents:components]; 

이 방법, 당신은 얻거나 같은 이러한 구성 요소를 설정할 수 있습니다.

설정하기를 원한다면 추가 로컬 및 기타 구성 요소에 컨텍스트를 추가했습니다.

무료 코드입니다. 노크하지 마세요.