Ho un metodo che estrae l'ora e i secondi componenti formano un NSDate suddividendolo nei suoi NSDateComponents. Il mio codice è il seguente ...Componenti NSDateComponents: fromDate e Fusi orari
unsigned hourAndMinuteFlags = NSHourCalendarUnit | NSMinuteCalendarUnit;
NSCalendar* calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
[calendar setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]];
NSDateComponents* travelDateTimeComponents = [calendar components:hourAndMinuteFlags fromDate:travelDate];
NSString* hours = [NSString stringWithFormat:@"%02i", [travelDateTimeComponents hour]];
NSString* minutes = [NSString stringWithFormat:@"%02i", [travelDateTimeComponents minute]];
Il mio problema è che sto perdendo un'ora nella conversione. Ho il sospetto che sia dovuto a fusi orari, ma per quanto posso vedere sia la data che viene trasmessa sia il calendario utilizzato sono entrambi GMT.
Per esempio, se mi passa nella seguente oggetto NSDate (questo è il log di [descrizione NSDate]) ...
2010-08-02 08:00:00 +0100
mi aspetto che ricevo 8 per ore e 0 per i minuti, ma io in realtà tornare indietro 7 per le mie ore.
Il mio orario di sistema è GMT, quindi l'NSDate sopra è attualmente +0100 per British Summer Time.
Quindi, se volevo confrontare il tempo di ora solo con 2 ore di apertura e chiusura senza data, il test fallisce perché ora il tempo è anche preceduto dalla data di oggi mentre le altre due volte saranno create con un anno base di 2000. Quindi come confrontare in questo caso? – marciokoko
Penso che i componenti di conversione-> data prendano in considerazione il fuso orario del calendario.Dovresti essere in grado di eseguire una conversione bidirezionale senza perdita purché tu utilizzi lo stesso calendario. –