문제

i에서nsdate에 대한 전화 문서 집합, 토론 영역에서 그들은 논의합니다 -dateWithNaturalLanguageString:locale:, 그러나 페이지의 다른 곳에서 메소드를 문서화하지 않습니다.

나는 iPhone에 이전 에이 방법을 사용했고 경고를 받았지만 잘 작동했습니다. 이제 나는 함께 만들고 있습니다 -Werror ( ^_ ^에 따라 모든 일을 했어야했을 것입니다.) 나는 이것으로 경고를받습니다.

다음 줄의 코드를 어떻게 교체합니까?

NSDate *today = [NSDate dateWithNaturalLanguageString:@"today at 23:59:59"];
NSDate *tomorrow = [NSDate dateWithNaturalLanguageString:@"tomorrow at 23:59:59"];
도움이 되었습니까?

해결책

이를 수행하는 한 가지 방법은 NSCALENDAR 및 NSDATECOMPONENTS입니다.

오늘 23:59:59에 오기 위해 :

NSDate *now = [NSDate date];
NSCalendar *calendar = [NSCalendar currentCalendar];

NSDateComponents *comps = [calendar components:NSYearCalendarUnit | NSMonthCalendarUnit |  NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit 
                                      fromDate:date];

[comps setHour:23];
[comps setMinute:59];
[comps setSecond:59];

NSDate *today = [calendar dateFromComponents:comps];

내일 23:59:59에 오기 위해 :

NSDate *now = [NSDate dateWithTimeIntervalSinceNow:24 * 60 * 60]; // 24h from now
NSCalendar *calendar = [NSCalendar currentCalendar];

NSDateComponents *comps = [calendar components:NSYearCalendarUnit | NSMonthCalendarUnit |  NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit 
                                      fromDate:date];

[comps setHour:23];
[comps setMinute:59];
[comps setSecond:59];

NSDate *tomorrow = [calendar dateFromComponents:comps];

다른 팁

가정하자 :

static const unsigned long seconds_per_day = 60 * 60 * 24;

지금 그리고 지금+24 시간을 할 수 있습니다.

NSDate* today = [NSDate date]; // set for today
NSDate* tomorrow = [today addTimeInterval:seconds_per_day];

주어진 날 자정을 얻으려면 NSDate* 통행료가없는 다리 CFDateRef, 사용하려는 추가 API를 제공합니다. 특히, 당신은 an을 변환 할 수 있습니다 NSDate a CFAbsoluteTime ~와 함께 CFDateGetAbsoluteTime:

CFAbsoluteTime abstime = CFDateGetAbsoluteTime(reinterpret_cast<CFDateRef>(myNSDate));
long long      inttime = static_cast<long long>(abstime);

inttime = (inttime / seconds_per_day) * seconds_per_day; // clips the time to midnight

NSDate* myNSDateAtMidnight = reinterpret_cast<NSDate*>(CFDateCreate(NULL,
                                                       static_cast<CFAbsoluteTime>(inttime)));

... 기능으로 포장하여 둘 다를 반올림 할 수 있습니다. today 그리고 tomorrow 자정까지.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top