2009-07-07 9 views
6

quiero tomar el día siguiente al dar la fecha actual el código que utiliza de la siguiente¿Cómo INCREMENTO un objeto NSDate en Objective-C

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

esto funciona bien, pero cuando el horario de verano activado este conduce a errores ¿Cómo puedo hacer que esto funcione cuando el horario de verano está habilitado.

+0

¿Puede especificar el idioma que está utilizando. Ayudará a las personas cuando respondan. – ChrisF

+0

Debe considerar renombrar 'segundos por día' o convertirlo en una constante y soltar la parte' * días'. Es una buena práctica en cualquier idioma. –

Respuesta

13

Como has encontrado, lo que tienes ahora es bastante propenso a errores. No solo puede tropezar con un cambio en el horario de verano, sino también ¿qué pasa si su usuario tiene un calendario no gregoriano? Entonces, los días no son 24 horas de duración.

su lugar, utilice NSCalendarNSDateComponents y que fueron diseñados precisamente para esto:

+ (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

No tengo idea qué idioma o sistema estás usando aquí, pero mi consejo sería realizar todos tus cálculos usando el tiempo como UTC y solo usar la hora local cuando vengas a mostrarlo.

La mayoría de los sistemas operativos e idiomas tendrán en cuenta el horario de verano y el horario de verano en la conversión de UTC a la hora local.

Cuestiones relacionadas