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"];
War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top