나는 날짜 선택 도구가 있습니다.미래의 NSD 배열을 배열하십시오
시간을 선택하면 다음 64 일간의 날짜를 얻고 싶습니다.
어떻게 날짜를 가지고 예에 해당 날짜
에서 다음 64 명 월요일에 대한 NSDates의있는 NSArray를 반환하는 방법을 쓰고 가겠어요 날짜 선택 도구에서 오후 6시 45 분에 시간을 집어 넣은 다음 그 시간으로 설정 한 다음 64 시간을 가져 오려고합니다.
나는 날짜 선택 도구가 있습니다.미래의 NSD 배열을 배열하십시오
시간을 선택하면 다음 64 일간의 날짜를 얻고 싶습니다.
어떻게 날짜를 가지고 예에 해당 날짜
에서 다음 64 명 월요일에 대한 NSDates의있는 NSArray를 반환하는 방법을 쓰고 가겠어요 날짜 선택 도구에서 오후 6시 45 분에 시간을 집어 넣은 다음 그 시간으로 설정 한 다음 64 시간을 가져 오려고합니다.
예 (ARC) :
NSDate *pickerDate = [NSDate date];
NSLog(@"pickerDate: %@", pickerDate);
NSDateComponents *dateComponents;
NSCalendar *calendar = [NSCalendar currentCalendar];
dateComponents = [calendar components:NSWeekdayCalendarUnit fromDate:pickerDate];
NSInteger firstMondayOrdinal = 9 - [dateComponents weekday];
dateComponents = [[NSDateComponents alloc] init];
[dateComponents setDay:firstMondayOrdinal];
NSDate *firstMondayDate = [calendar dateByAddingComponents:dateComponents toDate:pickerDate options:0];
dateComponents = [[NSDateComponents alloc] init];
[dateComponents setWeek:1];
for (int i=0; i<64; i++) {
[dateComponents setWeek:i];
NSDate *mondayDate = [calendar dateByAddingComponents:dateComponents toDate:firstMondayDate options:0];
NSLog(@"week#: %i, mondayDate: %@", i, mondayDate);
}
NSLog 출력 :
pickerDate를 : 2011-12-09 20시 38분 : 25 0000
주 번호 : 0, mondayDate : 2011-12-12 20시 38분 25초 0000
주 번호 : 1, mondayDate : 2011-12-19 20시 38분 25초 0000
주 번호 : 2, 월요일 날짜 : 2011-12-26 20:38:25 +0000
주 번호 : 3, mondayDate : 기록을 위해 2012-01-02 20시 38분 25초 0000
년 - 나머지 60 여기 -
답장을 보내 주셔서 감사합니다. 그 다음 4 월요일. 그냥 4 번 대신 63 번 반복해야하나요? –
나는 처음 4 개를 보여 주었고, 나는 이것을 더 명확하게하기 위해 편집했다. – zaph
궁금한 점은'firstMondayOrdinal' 계산을 위해 어디에서'9'를 얻었습니까? –
NSCalendar를 사용하여 오늘 (선택한 시간에) 요일을 결정할 수 있습니다. 그것을 다음 월요일에 도착하기 위해 튀기고, 그 다음 그것을 7 일까지 63 일까지 당신이 원하는 것처럼 보이는 월요일을 얻기 위해 부딪쳐 라.
피커에서 NSDate
으로 시작하고 월요일이 될 때까지 24 * 60 * 60 초를 계속 추가하십시오. 결과에 결과 날짜를 추가하십시오. 마지막으로 추가 한 날짜까지 7 * 24 * 60 * 60 초를 더한 다음 64 개의 월요일을 모두 가질 때까지 결과를 반환 목록으로 밀어 넣으십시오. 여기 NSDate
월요일에 떨어지면 당신이 말할 방법은 다음과 같습니다
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *weekdayComponents =[gregorian components:NSWeekdayCalendarUnit fromDate:dateOfInterest];
NSInteger weekday = [weekdayComponents weekday];
if (weekday == 2) ... // 2 represents Monday
편집 : DaveDeLong 위의 알고리즘의 부족을 지적했다 : 그것은 절약 시간을 일광 변경하는 일에 시간을 두 번 이동합니다. 대신 계산 (초)의 수동 NSDate
에 하루를 추가하려면이 코드를 사용
NSDate *currentDate = [NSDate date];
NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setDay:1]; // Add 1 when searching for the next Monday; add 7 when iterating 63 times
NSDate *date = [gregorian dateByAddingComponents:comps toDate:currentDate options:0];
[comps release];
NO NO NO NO 이것은 일광 절약 시간을 고려하지 않습니다! 그리고 질문자는 그가 똑같은 시간을 지키길 바란다고 분명히 말했습니다. –
@DaveDeLong 잘 잡으세요! 고정 ... – dasblinkenlight
@DaveDeLong 애플이 과거 실적으로부터 판단한 일광 절약 시간을 안다면 다소 논의가있다. :-) – zaph
, 나는 가까운 투표에 동의하지 않는다. –
옙 ... 이것은 상당히 도전적인 질문입니다. Ayaz, 다음 64 개의 월요일을 "가져오고 싶다"고 말할 때, 어떤 형태로 가져 오기를 원합니 까? NSDates 또는 EKEvents 또는? –
NSDates가 필요합니다 ... –