\starttext \unprotect \pushoverloadmode \setnewconstant \plussixty 60 \setnewconstant \plustwentyfour 24 \permanent\tolerant\protected\def\time[#1]% {\ifarguments \expandafter\normaltime \or \begingroup \resetdummyparameter h% \resetdummyparameter m% \ifempty{\dummyparameter h\dummyparameter m}% \setdummyparameter h{\normaltime/\plussixty}% \setdummyparameter m{\normaltime;\plussixty}% \else \letdummyparameter h\zerocount \letdummyparameter m\zerocount \fi \setdummyparameter\c!separator{:}% \getdummyparameters[#1]% \scratchcounterone{\dummyparameter h}% \scratchcountertwo{\dummyparameter m}% \advanceby\scratchcounterone{\scratchcountertwo/\plussixty}% \scratchcountertwo{\scratchcountertwo;\plussixty}% \scratchcounterone{\scratchcounterone;\plustwentyfour}% \ifnum\scratchcounterone<\plusten0\fi\tointeger\scratchcounterone \dummyparameter\c!separator \ifnum\scratchcountertwo<\plusten0\fi\tointeger\scratchcountertwo \endgroup \fi} \popoverloadmode \protect todo: \startitemize \startitem either of not leading zero \stopitem \startitem AM/PM but where and is this language dependent \stopitem \stopitemize \startlines primitive: \the\time test: \time[m=40] \time[m=100] \time[] \stoplines \dorecurse{100}{ \dorecurse{200}{ \time[h=#1,m=##1] } \par } \stoptext