53 votes

Différence entre deux objets NSDate - Résultat également un NSDate

J'ai deux NSDate objets et je veux que la différence entre les deux et le résultat devrait être à nouveau un objet NSDate. Une idée de comment réaliser cela?

Ici, je suis en train de répondre à un problème unique où je dois trouver le temps écoulé et puis localiser le temps écoulé. Je peux localiser si j'ai le temps écoulé dans NSDate objet. Donc la pensée de la création d'un objet NSDate qui a son composant de même que l'intervalle de temps entre les deux dates pour que je puisse utiliser NSDateFormatter la localiser.

151voto

Nick Forge Points 13758

NSDate représente une instance dans le temps, il n'est donc pas logique de représenter un intervalle de temps sous forme de NSDate . Ce que vous voulez, c'est NSDateComponents :

 NSDate *dateA;
NSDate *dateB;

NSCalendar *calendar = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
NSDateComponents *components = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit
                                           fromDate:dateA
                                             toDate:dateB
                                            options:0];

NSLog(@"Difference in date components: %i/%i/%i", components.day, components.month, components.year);
 

18voto

Nick Weaver Points 30418

Si vous soustrayez 12/12/2001 de 05/05/2002 quelle sera la date? La distance chronologique entre les deux dates ne peuvent pas être une date, c'est toujours une sorte d'intervalle. Vous pouvez utiliser timeIntervalSinceDate: pour calculer l'intervalle.

Pour localiser, vous pouvez essayer les étapes suivantes:

7voto

Jhaliya Points 24039

De NSDate référence de classe, vous avez des méthodes d'instance pour faire ceci -

  1. Comment comparer deux variables NSDate? Ans: isEqualToDate:
  2. Comment trouver la différence entre deux variables NSDate? Ans: timeIntervalSinceDate:
  3. Comment obtenir chaque valeur distincte de minute, heure et jour à partir de la variable NSDate? liens

4voto

Chris Doble Points 5308

Vous pouvez calculer l'intervalle de temps entre deux dates en utilisant NSDate 's timeIntervalSinceDate: , mais cela n'a aucun sens de représenter un intervalle de temps en tant que date.

3voto

neal Points 91

Il existe un moyen simple d'utiliser -compare: dans NSDate:

 NSDate *dateA = [NSDate dateWithTimeIntervalSinceNow:100];
NSDate *dateB = [NSDate dateWithTimeIntervalSinceNow:200];
NSDate *myDate = [NSDate dateWithTimeIntervalSinceNow:150];
NSArray *dateArray = [NSArray arrayWithObjects:dateA, dateB, myDate, nil];
NSArray *sortedArray = [dateArray sortedArrayUsingSelector:@selector(compare:)];
if ([myDate isEqualToDate:[sortedArray objectAtIndex:1]])
    NSLog(@"myDatea between dateA and dateB");
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X