2009-11-24 3 views
6

J'ai déjà essayé avec NSDate mais sans chance. Je veux la différence entre par exemple 14:10 et 18:30.obtenir le temps entre deux fois par jour

Heures et minutes.

J'espère que vous pouvez me aider ne devrait pas être compliqué :)

+0

Comment voulez-vous que la différence soit présentée? NSString, NSNumber, int, float, un autre NSDate? – Eimantas

+0

en tant que NSString. – user134282

Répondre

12

La classe NSDate a une timeIntervalSinceDate méthode qui fait l'affaire. NSTimeInterval est un double qui représente les secondes entre les deux heures.

+0

Vous devez ensuite faire vos propres calculs pour transformer les secondes en heures et minutes. Ensuite, vous devez convertir ces nombres en une chaîne. C'est trivial mais ça revient souvent. Je suggère de créer une classe utilitaire pour le faire et de le garder à portée de main. – TechZen

+0

ok merci! maintenant j'ai les secondes afin d'obtenir des heures je voudrais diviser à travers 3600. puis je reçois 1546521531. Pouvez-vous me donner des conseils s'il vous plaît? – user134282

17

Voici ma solution rapide:

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

merci! mhh le compilateur me donne une erreur que initWithDateFormat ... n'existe pas ... – user134282

+1

désolé, j'ai écrit cela avec le SDK Mac OS. Corrigé pour le SDK iPhone. – amrox

+0

great Code :) Merci beaucoup. – user134282

29

Il n'y a pas besoin de calculer cela en main, jetez un oeil à NSCalendar. Si vous voulez obtenir les heures et minutes entre deux dates, utilisez quelque chose comme ceci:

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

Vous avez maintenant les heures et les minutes NSDateComponents et peut y accéder comme NSIntegers comme [components hour] et [components minute]. Cela fonctionnera aussi pendant des heures entre les jours, les années bissextiles et d'autres choses amusantes.

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

Cela fonctionne pour moi .. Merci beaucoup. . . – iHart

Questions connexes