Sto scrivendo una categoria in Xcode, che estenderebbe l'attuale classe NSDate. Voglio aggiungere due metodi che uso regolarmente e in qualche modo non riesco a farli funzionare correttamente.Ottenere NSDate per oggi con 00:00:00 come orario
Attualmente ho questo codice:
+ (NSDate*) today
{
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *todayComponents = [gregorian components:(NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit) fromDate:[NSDate date]];
NSInteger theDay = [todayComponents day];
NSInteger theMonth = [todayComponents month];
NSInteger theYear = [todayComponents year];
NSDateComponents *components = [[NSDateComponents alloc] init];
[components setDay:theDay];
[components setMonth:theMonth];
[components setYear:theYear];
NSDate* todayDate = [gregorian dateFromComponents:components];
[components release];
[gregorian release];
return todayDate;
}
voglio che per restituire un data così: "2010-11-03 00:00:00 +01". Ma in qualche modo il fuso orario continua a buggin me, perché questo codice restituisce "2010-11-02 23:00:00 +0000".
Qualcuno può dirmi come risolvere questo codice per restituire effettivamente la data corretta? Oppure posso usare questa data e la mia applicazione la convertirà automaticamente a causa del fuso orario impostato sulla macchina.
Devo registrare determinati eventi nella mia app in un database, che utilizza anche il metodo [Data NSDate]. Significa che il metodo [Data NSDate] usa anche il tempo senza informazioni sul fuso orario?
MODIFICA: Penso che abbia qualcosa a che fare con il bug del tempo di risparmio di luce del giorno. Le cose che vedo sono esattamente le stesse che hanno le app di Clock, con il bug che fa svegliare la gente tardi. Inoltre, il fuso orario predefinito è il fuso orario attualmente impostato sul dispositivo, quindi dovrebbe rimanere invariato finché non si modifica il fuso orario nella schermata delle impostazioni.
EDIT2: Ok, qualche altro test:
NSLog(@"CurrentDate: %@", [NSDate date]);
NSLog(@"TZ: %@", [NSTimeZone defaultTimeZone]);
mi dà i seguenti risultati:
2010-11-03 23:23:49.000 App[8578:207] CurrentDate: 2010-11-03 22:23:49 +0000
2010-11-03 23:23:49.001 App[8578:207] TZ: Europe/Amsterdam (GMT+01:00) offset 3600
Nozzi ... davvero? Mi stai seguendo? : P. Penso che abbia qualcosa a che fare con il bug del tempo di risparmio Daylight. Le cose che vedo sono esattamente le stesse che hanno le app di Clock, con il bug che fa svegliare la gente tardi. –
Non conosco questa persona @jnozzi su Twitter che hai menzionato. Che cosa? Non hai menzionato? DANNAZIONE! Oh bene, sì, sono io. ;-) Hmm. Non ne ho sentito parlare. Potrebbe voler taggare l'iPhone quando si utilizza la roba di base, poiché Mac/iOS non è chiaro in questi casi. :-) –
Muhaha, so dove trovarti ovunque. Aggiornato di nuovo il mio post. Devo davvero aggiungere quell'offset quando chiamo [data NSDate]? Speravo che il sistema operativo lo avrebbe fatto automaticamente. –