bash, 78 байт (за допомогою утиліти BSD) або 79 байт (не для BSD)
Це трохи довше, ніж @DigitalTrauma та приємне баш-рішення для 71-байтового @ hvd, але мені начебто сподобалась ідея використання чисел у базі 60; Мені цікаво, якщо хтось може трохи більше пограти в гольф.
За допомогою стандартної утиліти BSD:
jot '-wx=`dc<<<60do3^%d+n`;((`dc<<<$x++'$1'-n`))||tr \ :<<<${x:3}' 86400 0|sh
Завдяки універсально доступній утиліті seq:
seq '-fx=`dc<<<60do3^%.f+n`;((`dc<<<$x++'$1'-n`))||tr \ :<<<${x:3}' 0 86399|sh
Ідея полягає в тому, щоб генерувати числа від 0 до 83699 і використовувати dc для їх перетворення в базу 60. "Цифри" на виході бази-60 постійного струму - це двозначні числа від 00 до 59, з пробілами, що розділяють "цифри", так тут перераховані всі бажані часи з 00 00 00 до 23 59 59 майже у потрібному форматі.
Якщо ви буквально це виконуєте, цифри нижче 60 ^ 2 не є 3-розрядними числами в базі 60, тому початковий 00 або 00 00 відсутній. З цієї причини я фактично генерую числа від 60 ^ 3 до 60 ^ 3 + 83699; це гарантує, що всі генеровані цифри мають рівно 4 цифри в базі 60. Це нормально, якщо я врешті-решт викину зайву першу цифру (01), яка не потрібна.
Отже, як тільки згенеровано бажаний час, я просто беру кожну четвірку з 01 00 00 00 до 01 23 59 59, додаю останні три числа та віднімаю аргумент $ 1. Якщо це 0, то я беру все в четвірку від 3-го символу і (викидаючи "01"), використовую tr, щоб перетворити пробіли в колони і надрукувати результат.