2009-03-17 12 views
13

Tengo dos timevalues ​​en el formato:% H% M% S (E.G.161500)Calcular diferencia de tiempo en Cocoa

Estos valores son enteros basados ​​en texto.

¿Hay una función simple en Cocoa que calcula la diferencia entre estos dos enteros usando una escala de 60 segundos y minutos?

Así que si

time 1 = 161500 
time 2 = 171500 

timedifference = 003000 

Respuesta

33
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
[dateFormatter setDateFormat:@"HHmmss"]; 

NSDate *date1 = [dateFormatter dateFromString:@"161500"]; 
NSDate *date2 = [dateFormatter dateFromString:@"171500"]; 

NSTimeInterval diff = [date2 timeIntervalSinceDate:date1]; // diff = 3600.0 
10

La clase para la manipulación de fechas es NSDate. El método para obtener intervalos de tiempo es -timeIntervalSinceDate:. El resultado es un valor NSTimeInterval, que es un double que representa el intervalo en segundos.

se puede crear un objeto a partir de una NSDateNSString con +dateWithString:, siempre que su fecha tiene el formato de 2001-03-24 10:45:32 +0600.

+1

Y si no lo es, se puede crear una instancia de un NSDateFormatter con la cadena de formato necesario. –

+0

Esto es útil. Gracias. – Jirapong

1

Crearía una subclase NSFormatter para analizar los valores de tiempo en ese formato de los datos de entrada (puede poner uno en un campo de texto para convertir automáticamente la entrada del usuario, o usarlo para analizar desde un origen de datos en código). Haga que devuelva el número combinado de segundos como NSTimeInterval (el doble representa segundos) envuelto en un NSNumber. A partir de ahí, es fácil restar la diferencia y mostrarla utilizando la misma clase NSFormatter que ha creado. Tanto en el análisis como en la visualización de valores, usted es el responsable de escribir la conversión de código de segundos a horas: minutos: segundos o el formato que desee. También puede convertir estos valores a un NSDate como mencionó mouviciel, si tiene sentido para su aplicación. Solo tenga en cuenta que siempre va a almacenar la diferencia horaria de una fecha de referencia, generalmente el 1 de enero de 1970 (NSDate tiene métodos para hacer esto por usted).

4

prueba este código.

- (NSTimeInterval)intervalBetweenDate:(NSDate *)dt1 andDate:(NSDate *)dt2 { 

NSTimeInterval interval = [dt2 timeIntervalSinceDate:dt1]; 
NSLog(@"%f",interval); 
return interval; 

}

Cuestiones relacionadas