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 :)
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 :)
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.
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
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
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];
gracias! mhh el compilador me da un error que initWithDateFormat ... no existe ... – user134282
lo siento, lo escribí con el Mac OS SDK. Corregido para iPhone SDK. – amrox
great Code :) Muchas gracias. – user134282
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.
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;
}
Esto funciona para mí ... Muchas gracias. . . – iHart
¿cómo desea que se presente la diferencia? NSString, NSNumber, int, float, otro NSDate? – Eimantas
como un NSString. – user134282