I like to use styles and the key system of PGF as much as I can, so I made this little solution.
I added the PGFmath functions croman and cRoman that take an integer number and output a string (i.e. it can't be used as a mathematical input to another function) in Roman numerals. The c denotes the fact that "IIII" is used instead of "IV".
As PGFmath functions cannot be redeclared with the declare function key I'm using .code keys with a helper macro \clockF. Not the best solution but it'll work here.
The last example redefines these functions for the second (minutes) and the third (seconds) level.
Code
\documentclass[tikz]{standalone}
\usetikzlibrary{arrows.meta}
\makeatletter
\pgfmathdeclarefunction{cRoman}{1}{%
\pgfmathcroman@{#1}\edef\pgfmathresult{\uppercase{\pgfmathresult}}}
\pgfmathdeclarefunction{croman}{1}{%
\begingroup
\pgfmathint@{#1}%
\ifnum\pgfmathresult<0\relax\let\pgfmathresult\pgfutil@empty
\else\ifnum\pgfmathresult=4\def\pgfmathresult{iiii}%
\else\edef\pgfmathresult{\romannumeral\pgfmathresult}\fi\fi
\pgfmath@smuggleone\pgfmathresult\endgroup}
\makeatother
\newcommand*\clockset[1]{\pgfqkeys{/clock}{#1}}
\pgfset{/pgf/declare function={angle(\i,\t)=90-360/\t*\i;
hide(\i,\n)=ifthenelse(mod(\i,\n)==0,"","\i");}}
\newcommand*\clockF[2]{\pgfkeysvalueof{/clock/f-#1/.@cmd}#2\pgfeov}
\clockset{
clock/.style={
name=c, ultra thick, circle, draw, minimum size=+6cm, outer sep=-.5\pgflinewidth},
f-1/.code={angle(#1,\pgfkeysvalueof{/clock/l-1})},
f-2/.code={angle(#1,\pgfkeysvalueof{/clock/l-2})},
f-3/.code={angle(#1,\pgfkeysvalueof{/clock/l-3})},
v-1/.initial=0, v-2/.initial=0, v-3/.initial=0, % 0:00:00
every hand/.style={draw, line cap=round},
levels/.initial=3, l-1/.initial=12, l-2/.initial=60, l-3/.initial=60,
line path/.style n args={3}{
insert path={(c.{\clockF{#2}{#1}}) -- ++({180+\clockF{#2}{#1}}:#3)}},
hand path/.style n args={3}{insert path={(c.center) -- ++ ({\clockF{#2}{#1}}:#3)}},
l-1-path/.style={draw, /clock/line path={#1}{1}{.4cm}},
l-2-path/.style={draw, /clock/line path={#1}{2}{.1cm}},
l-1-node/.style={font=\large, pos=1, anchor={\clockF{1}{#1}},
node contents={\pgfmathprint{cRoman(#1)}}},
l-2-node/.style={font=\sffamily\tiny, pos=0, inner sep=+3pt, anchor=south,
rotate={-90+\clockF{2}{#1}}, node contents={#1}},
l-3-node/.style={shape=coordinate},
hand-1-path/.style={/clock/every hand, /clock/hand path={#1}{1}{1.0cm}, ultra thick},
hand-2-path/.style={/clock/every hand, /clock/hand path={#1}{2}{1.4cm}, thick},
hand-3-path/.style={/clock/every hand, /clock/hand path={#1}{3}{1.8cm}},
time/.style args={#1:#2:#3}{
/clock/v-1={#1+(#2+(#3)/60)/60}, /clock/v-2={#2+(#3)/60}, /clock/v-3={#3}}}
\newcommand*\clock[1][]{%
\begin{tikzpicture}\clockset{#1}
\node[/clock/clock] {};
\foreach \level in {\pgfkeysvalueof{/clock/levels},...,1}{
\foreach \ll in {1,...,\pgfkeysvalueof{/clock/l-\level}}
\path[/clock/l-\level-path/.try=\ll] node[/clock/l-\level-node/.try=\ll] {};
\path[/clock/hand-\level-path/.try=\pgfkeysvalueof{/clock/v-\level}];}
\end{tikzpicture}}
\begin{document}
\clock[time=10:10:25]
\clock[l-2-node/.append style={pos=1, node contents=\pgfmathprint{hide(#1,5)},
anchor={ifthenelse(and(#1<45,#1>15),270,90)},rotate={ifthenelse(and(#1<45,#1>15),180,0)}}]
\clock[time=19:05:20, l-1=24, clock/.append style={rectangle},
l-1-node/.append style={font=\small, node contents={#1}},
f-2/.code={angle(#1,120)}, f-3/.code={180-angle(#1,120)}, l-2-path/.append style={red},
l-2-node/.style={pos=1, red, font=\sffamily\tiny, sloped, anchor=east, scale=.75,
inner sep=+1pt, node contents={\pgfmathprint{hide(#1,5)}}},
hand-2-path/.append style=red, hand-3-path/.append style=blue,
l-3-path/.style={draw=blue, /clock/line path={#1}{3}{.1cm}},
/tikz/execute at end picture={\sffamily\tikzset{nodes={inner sep=+2pt}}
\draw[red, -latex] (90:+1.45cm) arc[start angle=90, delta angle=-180, radius=+1.45cm]
node[midway, sloped, above]{\tiny Minutes};
\draw[blue, -latex] (90:+1.85cm) arc[start angle=90, delta angle=+180, radius=+1.85cm]
node[midway, sloped, above, rotate=180]{\tiny Seconds};}]
\end{document}
Output
