Estoy escribiendo una categoría en Xcode, que extendería la clase NSDate actual. Quiero agregar dos métodos que utilizo regularmente y de alguna manera no puedo hacer que funcionen correctamente.Obtener NSDate para hoy con 00:00:00 como hora
Actualmente tengo este código:
+ (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;
}
quiero que vuelva una fecha como esta: "2010-11-03 00:00:00 01". Pero de alguna manera la zona horaria me sigue molestando, porque este código devuelve "2010-11-02 23:00:00 +0000".
¿Alguien puede decirme cómo corregir este código para realmente devolver la fecha correcta? ¿O puedo usar esta fecha y mi aplicación la convertirá a sí misma debido a la zona horaria en la que está configurada la máquina?
Tengo que registrar ciertos eventos en mi aplicación en una base de datos, que también usa el método [NSDate date]. ¿Eso significa que el método [NSDate date] también usa el tiempo sin información de zona horaria?
EDIT: Creo que tiene algo que ver con el error del horario de verano. Las cosas que veo son exactamente las mismas que probablemente tiene la aplicación Clock, y el error hace que la gente se despierte tarde. Además, TimeZone se configura por defecto en TimeZone actualmente configurado en su dispositivo, por lo que debe permanecer igual hasta que cambie la zona horaria en la pantalla de configuración.
Edit2: bien, algunas pruebas más:
NSLog(@"CurrentDate: %@", [NSDate date]);
NSLog(@"TZ: %@", [NSTimeZone defaultTimeZone]);
me da los siguientes resultados:
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 ... realmente? ¿Me estás siguiendo? :PAG. Creo que tiene algo que ver con el error del horario de verano. Las cosas que veo son exactamente las mismas que probablemente tiene la aplicación Clock, y el error hace que la gente se despierte tarde. –
No conozco a esta persona @jnozzi de Twitter que mencionaste. ¿Qué? No lo mencionaste? ¡MALDITA SEA! Oh, bueno, sí, soy yo. ;-) Hmm. No escuché sobre eso. Es posible que desee etiquetar el iPhone cuando use material de Foundation, ya que Mac/iOS no está claro en esos casos. :-) –
Muhaha, sé dónde encontrarlo en todas partes. Actualicé mi publicación nuevamente. ¿Realmente necesito AGREGAR ese desplazamiento cuando llamo a [NSDate date]? Esperaba que el sistema operativo hiciera eso automáticamente. –