NSDate -dateWithNaturalLanguageString: auf dem iPhone?
-
20-09-2019 - |
Frage
In der i Telefon für Bird Dokumentation NSDate , im Diskussionsbereich sie -dateWithNaturalLanguageString:locale:
diskutieren, aber sie dokumentieren nicht die Methode an anderer Stelle auf der Seite.
Ich habe das Verfahren vor dem für das iPhone verwendet und es funktionierte gut, obwohl ich Warnungen bekam. Jetzt, wo ich das Bauen mit -Werror
(was ich tun die ganze Zeit ^ _ ^ haben sollte) mit diesem in eine Warnung Ich habe ausgeführt werden.
Wie würde ich die folgenden Zeilen Code ersetzen?
NSDate *today = [NSDate dateWithNaturalLanguageString:@"today at 23:59:59"];
NSDate *tomorrow = [NSDate dateWithNaturalLanguageString:@"tomorrow at 23:59:59"];
Lösung
Eine Möglichkeit, dies zu tun ist mit NSCalendar und NSDateComponents.
Um heute um 23:59:59 zu erhalten:
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];
morgen um 23:59:59 Um:
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];
Andere Tipps
Nehmen wir an:
static const unsigned long seconds_per_day = 60 * 60 * 24;
Sie können jetzt erhalten und + jetzt 24 Stunden:
NSDate* today = [NSDate date]; // set for today
NSDate* tomorrow = [today addTimeInterval:seconds_per_day];
Um Mitternacht für den gegebenen Tag zu bekommen, ist es wichtig, dass NSDate*
erinnern ist, gebührenfrei zu CFDateRef
überbrückt, die einige zusätzliche APIs bietet den Sie verwenden möchten werden. Insbesondere können Sie eine NSDate
zu einem CFAbsoluteTime
mit CFDateGetAbsoluteTime
konvertieren:
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)));
... die Sie in eine Funktion wickeln können sowohl today
und tomorrow
bis Mitternacht runden.