Estoy tratando de usar [[NSCalendar currentCalendar] ordinalityOfUnit:NSDayCalendarUnit inUnit:NSEraCalendarUnit forDate:date]
en dos fechas diferentes para ver si caen en el mismo día. Sin embargo, si mi zona horaria es diferente (por ejemplo, en algún lugar de Alemania), aunque las fechas son obviamente las mismas, los días devueltos son diferentes. Si utilizo NSYearCalendarUnit
en lugar de NSEraCalendarUnit
en las mismas fechas, los valores devueltos son los mismos.NSCalendar obteniendo la diferencia de días incorrecta
El único problema con el uso de NSYearCalendarUnit
es que devuelve el mismo valor para el mismo día de años diferentes, y no es fácil determinar el número de días entre dos fechas si caen en años diferentes.
¿Alguna idea de qué es lo que está mal o cómo determinar más fácilmente si dos fechas están en el mismo día, o para determinar el número de días entre ellas?
Ejemplo:
[NSTimeZone setDefaultTimeZone:[NSTimeZone timeZoneWithName:@"Europe/Berlin"]];
NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDate *date1 = [NSDate dateWithTimeIntervalSinceReferenceDate:300751200];
NSDate *date2 = [NSDate dateWithTimeIntervalSinceReferenceDate:300836062.388569];
NSLog(@"\nDate 1: %@\nDate 2: %@",date1,date2);
/*Output:
Date 1: 2010-07-14 00:00:00 +0200
Date 2: 2010-07-14 23:34:22 +0200
*/
int day1 = [cal ordinalityOfUnit:NSDayCalendarUnit inUnit:NSEraCalendarUnit
forDate:date1];
int day2 = [cal ordinalityOfUnit:NSDayCalendarUnit inUnit:NSEraCalendarUnit
forDate:date2];
NSLog(@"\nDay 1: %i\nDay 2: %i",day1,day2);
/*Output:
Day 1: 733966
Day 2: 733967
*/
day1 = [cal ordinalityOfUnit:NSDayCalendarUnit inUnit:NSYearCalendarUnit
forDate:date1];
day2 = [cal ordinalityOfUnit:NSDayCalendarUnit inUnit:NSYearCalendarUnit
forDate:date2];
NSLog(@"\nDay 1:%i\nDay 2: %i",day1,day2);
/*Output:
Day 1: 195
Day 2: 195
*/
Tengo el mismo problema. Parece que la era comienza en un tiempo fijo, digamos 00:00:01 1. Enero del año 1 GMT. NSYearCalendarUnit parece comenzar el 00:00:01 1. de enero, pero en la zona horaria NSCalendar, que puede no ser GMT. Esto podría explicar por qué los resultados de época/año difieren. Voy a completar el informe de errores. Esto hace que el método de ordinalidad sea inútil para la diferencia de días si los días no están en el mismo año. –