Разница между двумя объектами NSDate - результат также NSDate
У меня есть два объекта NSDate, и я хочу, чтобы разница между ними и результат снова должны быть объектами NSDate. Любая идея, как достичь этого?
Здесь я пытаюсь решить уникальную проблему, когда мне нужно выяснить прошедшее время, а затем локализовать прошедшее время. Я могу локализовать его, если у меня есть прошедшее время в объекте NSDate. Поэтому мы подумали о создании объекта NSDate, который имеет свой компонент времени так же, как временной интервал между двумя датами, чтобы я мог использовать NSDateFormatter для его локализации.
Ответы
Ответ 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");