2014-09-08 5 views
-2

Предполагая, что у меня есть время, такой, как 1: 28.004 (одну минуту двадцать восемь) или 1: 19: 10,236 (один час, девятнадцать минут и десять секунд), как я могу представить это с помощью NSDate или другого класса Cocoa? Затем, как бы я начал конвертировать его в миллисекунды? Наконец, как только я переработал миллисекунды, как бы я решил преобразовать его в правильный формат времени, например, выше?Время миллисекунд и обратно

3-значная точность важна, поскольку она связана со временем круга в автоспорте.

+2

Почему 'NSDate'? Почему бы не просто «NSTimeInterval»? – rmaddy

+1

Согласен; это не дата, это временной интервал. – trojanfoe

+0

@rmaddy @trojanfoe Не могли бы вы рассказать? Если я использую 'NSTimeInterval' для обработки миллисекунд, как я могу отформатировать его в формате, показанном выше? –

ответ

0

Мне удалось это понять, используя комбинацию NSDate и NSDateFormatter. Я хотел получить более элегантное решение (IMO), чем использование простой математики.

// Set up the date formatter 
NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
formatter.dateFormat = @"HH:mm:ss.SSS"; 
// Translate the time into an instance of NSDate 
NSDate *date = [formatter dateFromString:@"00:01:28.004"]; 
// Get the time in seconds; includes 3 decimal place precision 
NSTimeInterval seconds = [date timeIntervalSince1970]; 
// <Do what ever with the seconds here> 
// Convert seconds back to an instance of NSDate 
NSDate *dateFromSeconds = [NSDate dateWithTimeIntervalSince1970:seconds]; 
// Get the human readable version in the proper HH:mm:ss.SSS format, for display 
NSString *timeToDisplay = [formatter stringFromDate:dateFromSeconds]); 

И все это прекрасно работает и, как и ожидалось.

+0

'NSTimeInterval' измеряет секунды; поэтому имя переменной 'миллисекунды' запутывает. – trojanfoe

+0

Обновлено, чтобы сделать вещи более ясными. –

0

Вы можете использовать NSDate, сначала вычислив временной интервал, используя это, чтобы установить NSDate (прочитать документы!), А затем форматировать дату в формате UTC. Конечно, если вы отформатируете дату, то это будет дата в эпоху (1/1/1970 или 2001), но время (в UTC только!) Будет правильным.

Но простая математика (разделение и модульное деление) почти так же прост.

Смежные вопросы