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.

  1. Erstellen Sie ein NSDateFormatter-Objekt
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
  1. Stellen Sie das Datumsformat ein, in dem Sie Ihre Zeichenfolge möchten.
    dateFormatter.dateFormat = @"yyyy-MM-dd 'at' HH:mm";
  1. 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.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow