nsdate -datewithnaturallanguagestring : iPhone에서?
-
20-09-2019 - |
문제
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
자정까지.
제휴하지 않습니다 StackOverflow