¿Cómo puedo calcular el tiempo transcurrido en horas entre dos veces (posiblemente en días diferentes) en iOS?Cómo calcular el tiempo en horas entre dos fechas en iOS
Respuesta
El NSDate función timeIntervalSinceDate: le dará la diferencia de dos fechas en cuestión de segundos.
NSDate* date1 = someDate;
NSDate* date2 = someOtherDate;
NSTimeInterval distanceBetweenDates = [date1 timeIntervalSinceDate:date2];
double secondsInAnHour = 3600;
NSInteger hoursBetweenDates = distanceBetweenDates/secondsInAnHour;
Sede, la biblioteca de referencia manzanahttp://developer.apple.com/library/mac/navigation/ o si está usando Xcode simplemente seleccione ayuda/documentación en el menú.
Ver: how-to-convert-an-nstimeinterval-seconds-into-minutes
--edit: Ver ÐąrέÐέvil's answer below for correctly handling daylight savings/leap seconds
¿Y qué pasa si las fechas/horas cruzan la transición para el horario de verano? – Abizern
@Abizern: Gracias, no estaba considerando esos casos cuando respondí la pregunta. Me he vinculado a la respuesta por ÐąrέÐέvil – Akusete
tengo un intervalo de tiempo como 4:50:30, h: m: s tengo que restar este tiempo de 12:30:20 ¿cómo voy a hacer esto –
NSCalendar *c = [NSCalendar currentCalendar];
NSDate *d1 = [NSDate date];
NSDate *d2 = [NSDate dateWithTimeIntervalSince1970:1340323201];//2012-06-22
NSDateComponents *components = [c components:NSHourCalendarUnit fromDate:d2 toDate:d1 options:0];
NSInteger diff = components.minute;
NSDayCalendarUnit|NSHourCalendarUnit|NSMinuteCalendarUnit
cambiar los componentes necesarios a día, hora o minuto, lo que diferencia desea. Si NSDayCalendarUnit
se selecciona entonces va a devolver el número de días entre dos fechas de manera similar para NSHourCalendarUnit
y NSMinuteCalendarUnit
-(NSMutableString*) timeLeftSinceDate: (NSDate *) dateT {
NSMutableString *timeLeft = [[NSMutableString alloc]init];
NSDate *today10am =[NSDate date];
NSInteger seconds = [today10am timeIntervalSinceDate:dateT];
NSInteger days = (int) (floor(seconds/(3600 * 24)));
if(days) seconds -= days * 3600 * 24;
NSInteger hours = (int) (floor(seconds/3600));
if(hours) seconds -= hours * 3600;
NSInteger minutes = (int) (floor(seconds/60));
if(minutes) seconds -= minutes * 60;
if(days) {
[timeLeft appendString:[NSString stringWithFormat:@"%ld Days", (long)days*-1]];
}
if(hours) {
[timeLeft appendString:[NSString stringWithFormat: @"%ld H", (long)hours*-1]];
}
if(minutes) {
[timeLeft appendString: [NSString stringWithFormat: @"%ld M",(long)minutes*-1]];
}
if(seconds) {
[timeLeft appendString:[NSString stringWithFormat: @"%lds", (long)seconds*-1]];
}
return timeLeft;
}
No, no hagas esto. No todas las horas tienen 3600 segundos. No todos los días tienen 24 horas. – rmaddy
Esto es totalmente incorrecto. No tiene en cuenta los segundos intercalares, el ahorro de horario de verano. Por favor, no reinvente la rueda solo use las API provistas con iOS como NSDateComponents. –
Pedido: Se encarga de horario de verano, año bisiesto, ya que utiliza el calendario para calcular el IOS. Puede cambiar la cadena y las condiciones para incluir minutos con horas y días.
+(NSString*)remaningTime:(NSDate*)startDate endDate:(NSDate*)endDate {
NSDateComponents *components;
NSInteger days;
NSInteger hour;
NSInteger minutes;
NSString *durationString;
components = [[NSCalendar currentCalendar] components: NSCalendarUnitDay|NSCalendarUnitHour|NSCalendarUnitMinute
fromDate: startDate toDate: endDate options: 0];
days = [components day];
hour = [components hour];
minutes = [components minute];
if (days > 0) {
if (days > 1) {
durationString = [NSString stringWithFormat:@"%d days", days];
}
else {
durationString = [NSString stringWithFormat:@"%d day", days];
}
return durationString;
}
if (hour > 0) {
if (hour > 1) {
durationString = [NSString stringWithFormat:@"%d hours", hour];
}
else {
durationString = [NSString stringWithFormat:@"%d hour", hour];
}
return durationString;
}
if (minutes > 0) {
if (minutes > 1) {
durationString = [NSString stringWithFormat:@"%d minutes", minutes];
}
else {
durationString = [NSString stringWithFormat:@"%d minute", minutes];
}
return durationString;
}
return @"";
}
no muestra más de 12 horas de diferencia. si quiero verificar algunas condiciones a las 23 horas, ¿cómo puedo obtener 23 horas de diferencia entre las horas? – Moxarth
- 1. Calcular el número de horas entre 2 fechas en PHP
- 2. ¿Calcula el tiempo entre dos fechas?
- 3. Días, horas, minutos, segundos entre dos fechas
- 4. PHP para calcular el número de horas de oficina entre dos fechas
- 5. ActionScript 3.0 + ¿Calcula el intervalo de tiempo entre dos fechas?
- 6. calcular la diferencia entre dos fechas
- 7. Calcular la diferencia entre dos fechas en MySQL
- 8. ¿Cómo puedo calcular el número de años entre dos fechas?
- 9. java calcular el tiempo entre dos marcas de tiempo
- 10. Calcular el tiempo entre dos tiempos Android
- 11. ¿Cómo obtener la diferencia entre dos fechas redondeadas a horas
- 12. Diferencia en horas entre dos NSDate
- 13. Diferencia en el tiempo entre dos fechas en Java
- 14. Java, calcular el número de días entre dos fechas
- 15. ¿Cómo obtener el número total de horas entre dos fechas en el servidor sql?
- 16. Diferencia Calcular tiempo entre dos filas
- 17. ¿Diferencia entre 2 fechas y horas en horas?
- 18. C# - ¿Diferencia entre dos fechas?
- 19. Necesito calcular un tiempo transcurrido entre dos objetos de fecha
- 20. Duración entre dos fechas en Groovy
- 21. ¿Cómo puedo calcular el número de días entre dos fechas en Perl?
- 22. Cómo obtener la diferencia horaria (en horas) entre 2 fechas
- 23. Calcular la diferencia entre fecha/horas en PHP
- 24. cómo restar dos fechas y horas para obtener la diferencia
- 25. Cómo calcular la diferencia entre dos fechas en meses en MySQL
- 26. Calcular Número de años entre las fechas en Sql
- 27. Calcula la diferencia entre dos fechas en PHP
- 28. Calcular la diferencia entre el 2 fecha/horas en Oracle SQL
- 29. Diferencia entre fechas en dos filas consecutivas
- 30. Contabilizar días de trabajo entre dos fechas
Otra opción es usar 'NSCalendar' de [' -Componentes: fromdate: TODATE: opciones: '] (http://developer.apple.com/library/ios/#documentation/Cocoa/Reference /Fundación/Classes/NSCalendar_Class/Reference/NSCalendar.html) método. –
No creo que esto le dará un número absoluto de horas. Solo le dará un valor de 0 a 24, donde tendrá que confiar en los componentes Día, Mes y Año para obtener el intervalo de tiempo completo. – jonsibley
Probé esto, y funciona muy bien. Con fromDate 1/Jan/2012 y toDate 4/Jan/2012 esto devolvió 96 horas. –