Причина, по которой это происходит, заключается в том, что вы уже отформатировали свою строку перед тем, как поместить ее в свое пользовательское форматирование.
string ss = _seconds.Count.ToString(); // 0 becomes "0"
string mm = _minutes.Count.ToString();
string hh = _hours.Count.ToString();
Console.WriteLine("{0:00}:{0:00}:{0:00}", hh, mm, ss);
Она не будет дополнять нули до строки, только до int . Вместо этого попробуйте следующее:
string ss = _seconds.Count.ToString("00"); // 0 becomes "00"
string mm = _minutes.Count.ToString("00");
string hh = _hours.Count.ToString("00");
Console.WriteLine("{0}:{1}:{2}", hh, mm, ss);
Вы также можете пропустить помещение их во временные строковые переменные:
Console.WriteLine("{0:00}:{1:00}:{2:00}", _hours.Count, _minutes.Count, _seconds.Count);
Или использовать интерполированную строку:
Console.WriteLine($"{_hours.Count:00}:{_minutes.Count:00}:{_seconds.Count:00}");