bash, 78 byte (menggunakan utilitas BSD) atau 79 byte (non-BSD juga)
Ini sedikit lebih lama dari solusi bash 71-byte @DigitalTrauma dan @ hvd yang bagus, tapi saya agak menyukai gagasan di sini untuk menggunakan angka-angka pada basis 60; Saya ingin tahu apakah ada yang bisa memainkan golf ini sedikit lagi.
Dengan utilitas catatan standar BSD:
jot '-wx=`dc<<<60do3^%d+n`;((`dc<<<$x++'$1'-n`))||tr \ :<<<${x:3}' 86400 0|sh
Dengan utilitas seq yang lebih universal tersedia:
seq '-fx=`dc<<<60do3^%.f+n`;((`dc<<<$x++'$1'-n`))||tr \ :<<<${x:3}' 0 86399|sh
Idenya adalah untuk menghasilkan angka-angka dari 0 hingga 83699 dan menggunakan dc untuk mengubahnya menjadi basis 60. "Digit" dalam output basis-60 dc adalah angka 2 digit dari 00 hingga 59, dengan spasi memisahkan "digit", jadi ini mencantumkan semua waktu yang diinginkan dari 00 00 00 hingga 23 59 59 dalam hampir format yang diperlukan.
Namun, jika Anda benar-benar melaksanakannya, angka-angka di bawah 60 ^ 2 bukan angka 3-digit pada basis 60, sehingga awal 00 atau 00 00 hilang. Untuk alasan itu, saya benar-benar menghasilkan angka dari 60 ^ 3 hingga 60 ^ 3 + 83699; ini memastikan bahwa semua angka yang dihasilkan tepat 4 digit panjangnya di basis 60. Ini OK selama saya akhirnya membuang digit pertama tambahan (01) yang tidak diperlukan.
Jadi, setelah waktu yang diinginkan dihasilkan, saya hanya mengambil empat kali lipat dari 01 00 00 00 hingga 01 23 59 59, tambahkan tiga angka terakhir dan kurangi argumen $ 1. Jika itu 0, saya kemudian mengambil semuanya dalam quadruple dari karakter ke-3 (membuang "01"), gunakan tr untuk mengonversi spasi menjadi titik dua, dan mencetak hasilnya.