Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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);

Ответ 2

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

Чтобы локализовать, вы можете попробовать выполнить следующие действия:

Ответ 3

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

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

Ответ 4

Вы можете рассчитать временной интервал между двумя датами, используя NSDate timeIntervalSinceDate:, но для вас не имеет смысла представлять временной интервал как дату.

Ответ 5

Существует простой способ использования -compare: в 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");