Рассчитать разницу во времени в Какао
-
19-08-2019 - |
Вопрос
У меня есть два значения времени в формате:%H%M%S (например, 161500)
Эти значения представляют собой целые текстовые значения.
Есть ли в Cocoa простая функция, которая вычисляет разницу между этими двумя целыми числами, используя шкалу 60 секунд и минут?
Так что если
time 1 = 161500
time 2 = 171500
timedifference = 003000
Решение
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateFormat:@"HHmmss"];
NSDate *date1 = [dateFormatter dateFromString:@"161500"];
NSDate *date2 = [dateFormatter dateFromString:@"171500"];
NSTimeInterval diff = [date2 timeIntervalSinceDate:date1]; // diff = 3600.0
Другие советы
Класс для манипулирования датами - NSDate
. Метод получения временных интервалов -timeIntervalSinceDate:
. Результатом является значение NSTimeInterval
, которое представляет собой double
интервал в секундах.
Вы можете создать NSString
объект из +dateWithString:
с <=>, при условии, что ваша дата отформатирована как 2001-03-24 10:45:32 +0600 . р>
попробуйте этот код.
- (NSTimeInterval)intervalBetweenDate:(NSDate *)dt1 andDate:(NSDate *)dt2 {
NSTimeInterval interval = [dt2 timeIntervalSinceDate:dt1];
NSLog(@"%f",interval);
return interval;
}
Я бы создал подкласс NSFormatter для анализа значений времени в этом формате из входных данных (вы можете поместить один из них в текстовое поле для автоматического преобразования ввода пользователя или использовать его для анализа из источника данных в коде). Пусть он вернет объединенное количество секунд в виде NSTimeInterval (двойное число секунд), заключенное в NSNumber. Отсюда легко вычесть разницу и отобразить ее, используя тот же класс NSFormatter, который вы создали. Как при разборе, так и при отображении значений, вы несете ответственность за написание кода, конвертирующего из секунд в часы: минуты: секунды или любой другой формат, который вам нравится. Вы также можете преобразовать эти значения в NSDate, как упомянуто mouviciel, если это имеет смысл для вашего приложения. Просто помните, что вы всегда будете хранить разницу во времени с контрольной датой, обычно 1 января 1970 года (NSDate имеет методы, чтобы сделать это для вас).