2009-11-24 15 views
6

Ya lo he intentado con NSDate pero sin suerte. Quiero la diferencia entre, por ejemplo, 14:10 y 18:30.obtener tiempo entre dos veces al día

Horas y minutos.

espero que me puede ayudar a no debería ser tan complicado :)

+0

¿cómo desea que se presente la diferencia? NSString, NSNumber, int, float, otro NSDate? – Eimantas

+0

como un NSString. – user134282

Respuesta

12

clase El NSDate tiene una timeIntervalSinceDate método que hace el truco.

NSTimeInterval secondsBetween = [firstDate timeIntervalSinceDate:secondDate]; 

NSTimeInterval es un doble que representa los segundos entre las dos veces.

+0

Luego debe hacer sus propios cálculos para convertir los segundos en horas y minutos. Entonces tienes que convertir esos números en una cadena. Es trivial pero sale mucho. Sugiero crear clases de utilidad para hacer esto y tenerlo a mano. – TechZen

+0

bien gracias! ahora tengo los segundos para obtener horas que dividiría a través de 3600. entonces obtengo 1546521531. ¿Puede darme alguna pista por favor? – user134282

17

aquí está mi solución rápida:

NSDateFormatter *df = [[[NSDateFormatter alloc] init] autorelease]; 
[df setDateFormat:@"HH:mm"]; 
NSDate *date1 = [df dateFromString:@"14:10"]; 
NSDate *date2 = [df dateFromString:@"18:09"]; 
NSTimeInterval interval = [date2 timeIntervalSinceDate:date1]; 
int hours = (int)interval/3600;    // integer division to get the hours part 
int minutes = (interval - (hours*3600))/60; // interval minus hours part (in seconds) divided by 60 yields minutes 
NSString *timeDiff = [NSString stringWithFormat:@"%d:%02d", hours, minutes]; 
+0

gracias! mhh el compilador me da un error que initWithDateFormat ... no existe ... – user134282

+1

lo siento, lo escribí con el Mac OS SDK. Corregido para iPhone SDK. – amrox

+0

great Code :) Muchas gracias. – user134282

29

No hay necesidad de calcular esto a mano, echar un vistazo a NSCalendar. Si desea obtener las horas y los minutos entre dos fechas, usar algo como esto:

NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
NSUInteger unitFlags = NSHourCalendarUnit | NSMinuteCalendarUnit; 
NSDateComponents *components = [gregorianCalendar components:unitFlags 
                fromDate:firstDate 
                 toDate:otherDate 
                options:0]; 
[gregorianCalendar release]; 

Ahora tiene las horas y los minutos como NSDateComponents y puede acceder a ellos como NSIntegers como [components hour] y [components minute]. Esto también funcionará durante horas entre días, años bisiestos y otras cosas divertidas.

6
NSString *duration = [self calculateDuration:oldTime secondDate:currentTime]; 

- (NSString *)calculateDuration:(NSDate *)oldTime secondDate:(NSDate *)currentTime 
{ 
    NSDate *date1 = oldTime; 
    NSDate *date2 = currentTime; 

    NSTimeInterval secondsBetween = [date2 timeIntervalSinceDate:date1]; 

    int hh = secondsBetween/(60*60); 
    double rem = fmod(secondsBetween, (60*60)); 
    int mm = rem/60; 
    rem = fmod(rem, 60); 
    int ss = rem; 

    NSString *str = [NSString stringWithFormat:@"%02d:%02d:%02d",hh,mm,ss]; 

    return str; 
} 
+0

Esto funciona para mí ... Muchas gracias. . . – iHart

Cuestiones relacionadas