bash, 78 byte (usando un'utilità BSD) o 79 byte (anche non BSD)
Questo è un po 'più lungo di @DigitalTrauma e della bella soluzione bash a 71 byte di @ hvd, ma mi è piaciuta l'idea di usare i numeri nella base 60; Sono curioso di sapere se qualcuno può giocare a golf un po 'di più.
Con l'utilità jot standard BSD:
jot '-wx=`dc<<<60do3^%d+n`;((`dc<<<$x++'$1'-n`))||tr \ :<<<${x:3}' 86400 0|sh
Con l'utilità seq più universalmente disponibile:
seq '-fx=`dc<<<60do3^%.f+n`;((`dc<<<$x++'$1'-n`))||tr \ :<<<${x:3}' 0 86399|sh
L'idea è di generare i numeri da 0 a 83699 e utilizzare dc per convertirli in base 60. Le "cifre" nell'output di base-60 di cc sono numeri a 2 cifre da 00 a 59, con spazi che separano le "cifre", quindi questo elenca tutti i tempi desiderati da 00 00 00 a 23 59 59 in quasi il formato necessario.
Se lo esegui letteralmente, tuttavia, i numeri inferiori a 60 ^ 2 non sono numeri a 3 cifre nella base 60, quindi mancano gli 00 o 00 00 iniziali. Per questo motivo, sto effettivamente generando i numeri da 60 ^ 3 a 60 ^ 3 + 83699; questo assicura che tutti i numeri generati siano esattamente lunghi 4 cifre nella base 60. Questo va bene finché alla fine butto via la prima cifra extra (01) che non è necessaria.
Quindi, una volta generati i tempi desiderati, prendo solo ogni quadrupla da 01 00 00 00 a 01 23 59 59, aggiungo gli ultimi tre numeri e sottraggo l'argomento $ 1. Se è 0, prendo tutto nel quadruplo dal 3 ° carattere in poi (buttando via lo "01"), uso tr per convertire gli spazi in due punti e stampo il risultato.