Da dies anscheinend meine beliebteste Antwort ist, werde ich versuchen, sie zu bearbeiten, um ein bisschen mehr Informationen zu enthalten.
Trotz seines Namens NSDate
markiert es an und für sich nur einen Zeitpunkt in der Maschine, kein Datum. Es gibt keine Korrelation zwischen dem durch a NSDate
und einem Jahr, Monat oder Tag angegebenen Zeitpunkt . Dafür müssen Sie sich auf einen Kalender beziehen. Jeder gegebene Zeitpunkt gibt unterschiedliche Datumsinformationen zurück, je nachdem, welchen Kalender Sie betrachten (Datumsangaben sind beispielsweise im gregorianischen und im jüdischen Kalender nicht gleich), und während der gregorianische Kalender der am häufigsten verwendete Kalender im Kalender ist Welt - ich nehme an - wir sind ein wenig voreingenommen, das NSDate
sollte es immer benutzen. NSDate
Zum Glück ist es viel parteiübergreifender.
NSCalendar
Wie Sie bereits erwähnt haben, müssen Datum und Uhrzeit ermittelt werden , aber es gibt einen einfacheren Weg, dies zu tun:
NSDateComponents *components = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear fromDate:[NSDate date]];
Dadurch wird NSDateComponents
aus dem aktuellen Systemkalender für den aktuellen Tag ein Objekt generiert , das Tag, Monat und Jahr enthält. ( Hinweis: Dies ist nicht unbedingt der aktuelle benutzerdefinierte Kalender, sondern nur der Standardsystemkalender.)
Wenn Sie einen anderen Kalender oder ein anderes Datum verwenden, können Sie dies natürlich leicht ändern. Eine Liste der verfügbaren Kalender und Kalendereinheiten finden Sie in der NSCalendar
Klassenreferenz . Weitere Informationen NSDateComponents
zu finden Sie in der NSDateComponents
Klassenreferenz .
Als Referenz ist der Zugriff auf einzelne Komponenten von der NSDateComponents
ziemlich einfach:
NSInteger day = [components day];
NSInteger month = [components month];
NSInteger year = [components year];
Sie müssen nur aufpassen: Sie NSDateComponents
enthalten keine gültigen Informationen für Felder, nach denen Sie fragen, es sei denn, Sie haben sie mit diesen gültigen Informationen generiert (dh Sie müssen diese NSCalendar
Informationen mit NSCalendarUnit
s versehen). NSDateComponents
enthalten keine Referenzinformationen an und für sich - es handelt sich lediglich um einfache Strukturen, die Nummern enthalten, auf die Sie zugreifen können. Wenn Sie beispielsweise auch eine Ära beenden möchten NSDateComponents
, müssen Sie die Generatormethode NSCalendar
mit dem NSCalendarUnitEra
Flag füttern .