Разница между двумя объектами NSDate-результат также NSDate


У меня есть два объекта NSDate, и я хочу, чтобы разница между ними и результатом снова была объектом NSDate. Есть идеи, как этого добиться?

здесь я пытаюсь решить уникальную проблему, где я должен узнать прошедшее время, а затем локализовать прошедшее время. Я могу локализовать его, если у меня есть истекшее время в объекте NSDate. Поэтому я подумал о создании объекта NSDate, который имеет свой временной компонент, такой же, как временной интервал между двумя датами, чтобы я мог использовать NSDateFormatter для его локализации.

5 53

5 ответов:

NSDate представляет экземпляр во времени, поэтому не имеет смысла представлять интервал времени как NSDate. То, что вы хотите 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);

Если вычесть 12/12/2001 из 05/05/2002, какой будет дата? Хронологическое расстояние между двумя датами не может быть датой, это всегда какой-то интервал. Вы можете использовать timeIntervalSinceDate: для расчета интервала.

для локализации вы можете попробовать следующие шаги:

С NSDate ссылка на класс, у вас есть методы экземпляра, чтобы сделать это -

  1. как сравнить две переменные NSDate? Ans:isEqualToDate:
  2. как найти разницу между двумя переменными NSDate? Ans:timeIntervalSinceDate:
  3. как получить каждое отдельное значение минуты, часов и дней из переменной NSDate? ссылки

вы можете рассчитать временной интервал между двумя датами с помощью NSDate ' s timeIntervalSinceDate:, но это не имеет никакого смысла для вас, чтобы представить интервал времени в качестве даты.

есть простой способ с помощью-сравнить: в 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");