2009-07-07 13 views
6

voglio prendere il giorno dopo, dando la data corrente Il codice che ho usato come segueCome faccio a incrementare un oggetto NSDate in Objective-C

+(NSDate *)getForDays:(int)days fromDate:(NSDate *) date { 
    NSTimeInterval secondsPerDay = 24 * 60 * 60 * days; 
     return [date addTimeInterval:secondsPerDay]; 
} 

questo funziona bene, ma quando l'ora legale ha permesso questo porta ad errori. Come posso farlo funzionare quando è abilitata l'ora legale.

+0

è possibile specificare la lingua che si sta utilizzando. Aiuterà le persone quando risponderanno. – ChrisF

+0

Dovresti cercare di rinominare "secondi al giorno" o trasformarlo in una costante e rilasciare la parte "* days". È una buona pratica in qualsiasi lingua. –

risposta

13

Come hai trovato, quello che hai ora è piuttosto soggetto a errori. Non solo può inciampare in un cambio dell'ora legale, ma anche cosa succede se il tuo utente ha un calendario non gregoriano? Quindi, i giorni non sono lunghi 24 ore.

Al contrario, utilizzare NSCalendar e NSDateComponents che sono stati esattamente progettato per questo:

+ (NSDate *)getForDays:(int)days fromDate:(NSDate *)date 
{ 
    NSDateComponents *components= [[NSDateComponents alloc] init]; 
    [components setDay:days]; 

    NSCalendar *calendar = [NSCalendar currentCalendar]; 
    return [calendar dateByAddingComponents:components toDate:date options:0]; 
} 
-1

Non ho idea di quale lingua o sistema si sta utilizzando qui, ma il mio consiglio sarebbe quello di eseguire tutti i calcoli utilizzando il tempo come UTC e utilizzare solo l'ora locale quando si arriva a visualizzarlo.

La maggior parte dei sistemi operativi e delle lingue influenzerà il timzone e l'ora legale sulla conversione dell'ora UTC in ora locale.

Problemi correlati