Ricerca…


Osservazioni

NSDate è un tipo di valore molto semplice, che rappresenta un momento esatto nel tempo universale. Non contiene informazioni su fusi orari, ora legale, calendari o impostazioni internazionali.

NSDate è in realtà solo un wrapper immutabile attorno a un NSTimeInterval che è un double . Non esiste una sottoclasse mutabile, come con altri tipi di valore in Foundation.

Creazione di un NSDate

La classe NSDate fornisce metodi per la creazione di oggetti NSDate corrispondenti a una data e un'ora specificate. Un NSDate può essere inizializzato usando l'inizializzatore designato, che:

Restituisce un oggetto NSDate inizializzato relativo a 00:00:00 UTC del 1 gennaio 2001 di un dato numero di secondi.

NSDate *date = [[NSDate alloc] initWithTimeIntervalSinceReferenceDate:100.0];

NSDate offre anche un modo semplice per creare un NSDate uguale alla data e all'ora correnti:

NSDate *now = [NSDate date];

È anche possibile creare un NSDate un dato numero di secondi dalla data e ora correnti:

NSDate *tenSecondsFromNow = [NSDate dateWithTimeIntervalSinceNow:10.0];

Data di confronto

Esistono 4 metodi per confrontare gli NSDate in Objective-C:

  • - (BOOL)isEqualToDate:(NSDate *)anotherDate
  • - (NSDate *)earlierDate:(NSDate *)anotherDate
  • - (NSDate *)laterDate:(NSDate *)anotherDate
  • - (NSComparisonResult)compare:(NSDate *)anotherDate

Considera il seguente esempio utilizzando 2 date, NSDate date1 = July 7, 2016 e 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 

Ora che gli NSDate vengono creati, possono essere confrontati:

if ([date1 isEqualToDate:date2]) {
    //Here it returns false, as both dates are not equal
}

Possiamo anche usare i earlierDate: e laterDate: della classe 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.

Infine, possiamo utilizzare il compare: NSDate compare: metodo:

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
    }

Converti NSDate composto da ora e minuto (solo) a un NSDate completo

Esistono molti casi in cui uno ha creato un NSDate da un formato di un'ora e minuti, ovvero: 08:12

Il lato negativo di questa situazione è che il tuo NSDate è quasi completamente "nudo" e quello che devi fare è creare: giorno, mese, anno, secondo e fuso orario in modo che questo oggetto "giochi" con altri tipi NSDate.

Per fare un esempio, diciamo che hourAndMinute è il tipo NSDate composto dal formato ora e minuto:

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];

Ora il tuo oggetto è l'esatto contrario di essere "nudo".

Conversione da NSDate a NSString

Se ww ha un oggetto NSDate, e vogliamo convertirlo in NSString. Esistono diversi tipi di stringhe Date. Come possiamo farlo ?, È molto semplice. Solo 3 passi.

  1. Crea oggetto NSDateFormatter
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
  1. Impostare il formato della data in cui si desidera la stringa.
    dateFormatter.dateFormat = @"yyyy-MM-dd 'at' HH:mm";
  1. Ora, prendi la stringa formattata

     NSDate *date = [NSDate date]; // your NSDate object
     NSString *dateString = [dateFormatter stringFromDate:date];
    

Questo darà qualcosa di simile a questo: 2001-01-02 at 13:00

Nota:

La creazione di un'istanza NSDateFormatter è un'operazione costosa, quindi è consigliabile crearla una volta e riutilizzarla quando possibile.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow