Форматирование секунд в hh: ii: ss
У меня есть приложение, которое является основным таймером. Он отслеживает количество секунд, в которые приложение запускалось. Я хочу преобразовать его так, чтобы отображались секунды (NSUInteger): 00:00:12 (чч: мм: сс). Итак, я прочитал этот пост:
NSNumber от секунд до часов, минут, секунд
Из которого я написал этот код:
NSDate *date = [NSDate dateWithTimeIntervalSince1970:[[self meeting] elapsedSeconds]];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"hh:mm:ss"];
Он отлично работает, но начинается с 04:00:00. Я не знаю, почему. Я также попытался сделать что-то вроде:
NSDate *date = [NSDate dateWithTimeIntervalSinceNow:[[self meeting] elapsedSeconds] * -1];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"hh:mm:ss"];
Подумав, что он будет корректно отображать счетчик, но он делает wierd 01:23:00, а затем просто проваливается до 04:00:00 и остается там до конца.
МС
Ответы
Ответ 1
Это похоже на предыдущий ответ о времени форматирования, но не требует форматирования даты, потому что мы больше не имеем дело с датами.
Если у вас есть количество секунд, сохраненных как целое число, вы можете сами самостоятельно разработать отдельные компоненты времени:
NSUInteger h = elapsedSeconds / 3600;
NSUInteger m = (elapsedSeconds / 60) % 60;
NSUInteger s = elapsedSeconds % 60;
NSString *formattedTime = [NSString stringWithFormat:@"%u:%02u:%02u", h, m, s];
Ответ 2
Хотя есть более простые способы сделать это (@dreamlax имеет очень хороший способ), позвольте мне объяснить, что не так с вашим примером, и пусть он работает:
Во-первых, причина, по которой он показывает 04:00:00
(ну, вероятно, на самом деле показывает 04:00:12
), состоит в том, что он преобразует время с UTC/GMT в ваше местное время. Чтобы исправить это, вам нужно добавить следующую строку:
[formatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
Тогда он больше не будет показывать 04:00:12
, потому что он не преобразует часовой пояс. К сожалению, теперь он будет показывать 12:00:12
вместо 00:00:12
, потому что это полночь. Чтобы исправить это, попробуйте преобразовать строку в 24-часовое время вместо HH
вместо HH
:
[formatter setDateFormat:@"HH:mm:ss"];
Имейте в виду, что, поскольку он был разработан для работы со временем, он не будет работать более 24 часов (потому что он снова перевернется до полуночи).
Полный код:
NSDate *date = [NSDate dateWithTimeIntervalSince1970:[[self meeting] elapsedSeconds]];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"HH:mm:ss"];
[formatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
NSLog(@"%@", [formatter stringFromDate:date]);
// Results: 00:00:12