Objective-C Language
NSDate
Suche…
Bemerkungen
NSDate
ist ein sehr einfacher NSDate
, der einen genauen Moment in der NSDate
. Es enthält keine Informationen zu Zeitzonen, Sommerzeit, Kalender oder Gebietsschema.
NSDate
ist eigentlich nur ein unveränderlicher Wrapper um einen NSTimeInterval
der ein double
. Wie bei einigen anderen Werttypen in Foundation gibt es keine veränderliche Unterklasse.
NSDate erstellen
Die NSDate
Klasse stellt Methoden zum Erstellen von NSDate
Objekten NSDate
, die einem bestimmten Datum und einer bestimmten Uhrzeit entsprechen. Ein NSDate
kann mit dem angegebenen Initialisierer initialisiert werden, der:
Gibt ein
NSDate
Objekt zurück, das am 1. Januar 2001 um 00:00:00 UTC um eine bestimmte Anzahl von Sekunden initialisiert wurde.
NSDate *date = [[NSDate alloc] initWithTimeIntervalSinceReferenceDate:100.0];
NSDate
bietet auch eine einfache Möglichkeit, ein NSDate
dem aktuellen Datum und der aktuellen Uhrzeit zu erstellen:
NSDate *now = [NSDate date];
Es ist auch möglich, ein NSDate
einer bestimmten Anzahl Sekunden vom aktuellen Datum und der aktuellen Uhrzeit zu erstellen:
NSDate *tenSecondsFromNow = [NSDate dateWithTimeIntervalSinceNow:10.0];
Datumsvergleich
Es gibt 4 Methoden zum Vergleichen von NSDate
in Objective-C:
-
- (BOOL)isEqualToDate:(NSDate *)anotherDate
-
- (NSDate *)earlierDate:(NSDate *)anotherDate
-
- (NSDate *)laterDate:(NSDate *)anotherDate
-
- (NSComparisonResult)compare:(NSDate *)anotherDate
Betrachten Sie das folgende Beispiel mit zwei Datumsangaben: NSDate date1 = July 7, 2016
und NSDate date2 = July 2, 2016
:
NSDateComponents *comps1 = [[NSDateComponents alloc]init];
comps.year = 2016;
comps.month = 7;
comps.day = 7;
NSDateComponents *comps2 = [[NSDateComponents alloc]init];
comps.year = 2016;
comps.month = 7;
comps.day = 2;
NSDate* date1 = [calendar dateFromComponents:comps1]; //Initialized as July 7, 2016
NSDate* date2 = [calendar dateFromComponents:comps2]; //Initialized as July 2, 2016
Nun, da die NSDate
erstellt wurden, können sie verglichen werden:
if ([date1 isEqualToDate:date2]) {
//Here it returns false, as both dates are not equal
}
Wir können auch die Methoden earlierDate:
und laterDate:
der Klasse NSDate
:
NSDate *earlierDate = [date1 earlierDate:date2];//Returns the earlier of 2 dates. Here earlierDate will equal date2.
NSDate *laterDate = [date1 laterDate:date2];//Returns the later of 2 dates. Here laterDate will equal date1.
Schließlich können wir die compare:
Methode von NSDate
verwenden:
NSComparisonResult result = [date1 compare:date2];
if (result == NSOrderedAscending) {
//Fails
//Comes here if date1 is earlier than date2. In our case it will not come here.
}else if (result == NSOrderedSame){
//Fails
//Comes here if date1 is the same as date2. In our case it will not come here.
}else{//NSOrderedDescending
//Succeeds
//Comes here if date1 is later than date2. In our case it will come here
}
Konvertieren Sie NSDate, das (nur) aus Stunde und Minute besteht, in ein vollständiges NSDate
Es gibt viele Fälle, in denen ein NSDate nur aus einem Stunden- und Minutenformat erstellt wurde, z. B. 08:12
Der Nachteil für diese Situation ist, dass Ihr NSDate fast vollständig "nackt" ist und Sie Folgendes erstellen müssen: Tag, Monat, Jahr, Sekunde und Zeitzone, damit dieses Objekt mit anderen NSDate-Typen "zusammenspielen" kann.
Nehmen wir an, dass hourAndMinute der NSDate-Typ ist, der sich aus dem Stunden- und Minutenformat zusammensetzt.
NSDateComponents *hourAndMintuteComponents = [calendar components:NSCalendarUnitHour | NSCalendarUnitMinute
fromDate:hourAndMinute];
NSDateComponents *componentsOfDate = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear
fromDate:[NSDate date]];
NSDateComponents *components = [[NSDateComponents alloc] init];
[components setDay: componentsOfDate.day];
[components setMonth: componentsOfDate.month];
[components setYear: componentsOfDate.year];
[components setHour: [hourAndMintuteComponents hour]];
[components setMinute: [hourAndMintuteComponents minute]];
[components setSecond: 0];
[calendar setTimeZone: [NSTimeZone defaultTimeZone]];
NSDate *yourFullNSDateObject = [calendar dateFromComponents:components];
Jetzt ist dein Objekt das totale Gegenteil von "nackt".
Konvertierung von NSDate in NSString
Wenn ww ein NSDate-Objekt hat und wir es in NSString konvertieren möchten. Es gibt verschiedene Arten von Date-Zeichenfolgen. Wie können wir das machen? Es ist sehr einfach. Nur 3 Schritte.
- Erstellen Sie ein NSDateFormatter-Objekt
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
- Stellen Sie das Datumsformat ein, in dem Sie Ihre Zeichenfolge möchten.
dateFormatter.dateFormat = @"yyyy-MM-dd 'at' HH:mm";
Holen Sie sich jetzt die formatierte Zeichenfolge
NSDate *date = [NSDate date]; // your NSDate object NSString *dateString = [dateFormatter stringFromDate:date];
Dies ergibt eine Ausgabe in etwa wie 2001-01-02 at 13:00
: 2001-01-02 at 13:00
Hinweis:
Das Erstellen einer NSDateFormatter
Instanz ist ein teurer Vorgang. NSDateFormatter
wird empfohlen, sie einmal zu erstellen und nach Möglichkeit wiederzuverwenden.