web-dev-qa-db-fra.com

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

J'ai deux objets NSDate et je veux que la différence entre les deux et le résultat soit à nouveau un objet NSDate. Une idée de comment y parvenir?

Ici, j'essaie de résoudre un problème unique où je dois trouver le temps écoulé, puis localiser le temps écoulé. Je peux le localiser si j'ai le temps écoulé dans l'objet NSDate. J'ai donc pensé à créer un objet NSDate qui a sa composante de temps identique à l'intervalle de temps entre les deux dates afin que je puisse utiliser NSDateFormatter pour le localiser.

53
Abhinav

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

NSDate *dateA;
NSDate *dateB;

NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
NSDateComponents *components = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay
                                           fromDate:dateA
                                             toDate:dateB
                                            options:0];

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

Si vous soustrayez 12/12/2001 du 05/05/2002 quelle sera la date? La distance chronologique entre deux dates ne peut 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:

18
Nick Weaver

À partir de la référence de classe NSDate, vous avez des méthodes d'instance pour les faire -

  1. Comment comparer deux variables NSDate? Rép: isEqualToDate:
  2. Comment trouver la différence entre deux variables NSDate? Rép: timeIntervalSinceDate:
  3. Comment obtenir chaque valeur distincte de minutes, heures et jours à partir de la variable NSDate? liens
7
Jhaliya

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

4
Chris Doble

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");
3
neal