Форматирование секунд в 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