i'm sorta writing this as a separate answer because it's about a sub-topic (how to get an arbitrary delay with continuous-time precision in a discrete-time system).
the simplest way to think about fractional-sample interpolation, in my opinion, is just to consider the reconstruction half of the Nyquist-Shannon-Whittaker-Kotelnikov-whomever sampling and reconstruction theorem. if a continuous-time signal $x(t)$ is sampled sufficiently at sample rate $f_s=\frac{1}{T}$ ($T$ is the sampling period)
$$ x[n] \triangleq x(nT) \quad n \in \mathbb{Z} $$
then $x(t)$ is reconstructed from the samples $x[n]$ with
$$ \begin{align}
x(t) & = \sum\limits_{n=-\infty}^{+\infty} x[n] \cdot \frac{\sin\left(\pi \tfrac{t-nT}{T} \right)}{\pi \tfrac{t-nT}{T}}\\
\\
& = \sum\limits_{n=-\infty}^{+\infty} x[n] \cdot \operatorname{sinc}\left( \tfrac{t-nT}{T} \right) \\
\\
& = \sum\limits_{n=-\infty}^{+\infty} x[n] \cdot \operatorname{sinc}\left( \tfrac{t}{T} - n \right) \\
\end{align} $$
where
$$ \operatorname{sinc}(u) \triangleq \begin{cases}
\frac{\sin(\pi u)}{\pi u} \qquad & u \ne 0 \\
1 & u = 0
\end{cases} $$
note that $\operatorname{sinc}(u)$ is an even-symmetry function
$$ \operatorname{sinc}(-u) = \operatorname{sinc}(u) $$
now, without loss of generality, let's say that $t=0$ is the present instant of time (which means that $x[0]$ is the most current sample of $x(t)$,
all past samples, $x[n]$, have negative indices, and none of the future samples with positive indices exist) and we want to know what $x(t)$ is at some delayed time $x(-D)$ where delay $D>0$.
$$ x(-D) = \sum\limits_{n=-\infty}^{+\infty} x[n] \cdot \operatorname{sinc}\left( \frac{-D}{T} - n \right) $$
first thing to do is split the normalized delay, $\frac{D}{T}$, which is dimensionless, into integer, $i_D$, and fractional, $f_D$ parts:
$$ \frac{D}{T} = i_D + f_D $$
where
$$ i_D \triangleq \left\lfloor \frac{D}{T} \right\rfloor = \operatorname{floor}\left( \frac{D}{T} \right) $$
$$ f_D = \frac{D}{T}- i_D = \frac{D}{T} - \left\lfloor \frac{D}{T} \right\rfloor $$
note that $$\tfrac{D}{T} - 1 < i_D \le \tfrac{D}{T} < i_D + 1 $$
and $ 0 \le f_D < 1 $ .
then $x(-D)$ is reconstructed from the samples $x[n]$ with
$$ \begin{align}
x(-D) & = \sum\limits_{n=-\infty}^{+\infty} x[n] \cdot \operatorname{sinc}\left( \frac{-D}{T} - n \right) \\
\\
& = \sum\limits_{n=-\infty}^{+\infty} x[n] \cdot \operatorname{sinc}\left( -(i_D + f_D) - n \right) \\
\end{align} $$
to make this summation finite, we have to toss out all but the samples of $x[n]$ but those closest to $x[-i_D]$. this is essentially what windowing is about. if we're keeping the $L$ (where $L$ is even) closest samples on the left and right of the interpolated value at a time precisely $\tfrac{D}{T}$ samples in the past:
$$ \begin{align}
x(-D) & = \sum\limits_{n=-i_D - L/2 + 1}^{-i_D + L/2} x[n] \cdot \operatorname{sinc}\left( -(i_D + f_D) - n \right) w(n + i_D + f_D) \\
\\
& = \sum\limits_{n= -L/2 + 1}^{L/2} x[n - i_D] \cdot \operatorname{sinc}\left( -f_D - n \right) w(n + f_D) \\
\\
& = \sum\limits_{n= -L/2 + 1}^{L/2} x[n - i_D] \cdot \operatorname{sinc}( f_D + n ) w(n + f_D) \\
\end{align} $$
where $w(t)$ is some window function. if it were a Hamming Window, it would be:
$$ w(t) = \begin{cases}
0.54 \ + \ 0.46 \cdot \cos\left(\pi \frac{t}{L/2} \right) \qquad & |t| \le L/2 \\
0 & |t| > L/2 \\
\end{cases}$$
it were a Kaiser window it would be
$$ w(t) = \begin{cases}
\frac{1}{I_0(\beta)} \, I_0\left(\beta \sqrt{1 - \left(\frac{t}{L/2}\right)^2 } \right) \qquad & |t| \le L/2 \\
0 & |t| > L/2 \\
\end{cases}$$
where
$$ I_0(u) \triangleq \sum\limits_{k=0}^{\infty} \frac{(-1)^k \big( \tfrac{u}{2} \big)^{2k}}{(k!)^2} $$
is the zeroth-order Bessel function of the first kind. with the Kaiser window, knowing the length $L$ (like $L$ might be 16 samples, or 32 if you want it really good) you can choose $\beta$ to tradeoff between the stopband attenuation and transition bandwidth of the reconstruction brickwall filter. a good value of $\beta$ is 6 or 7, to get you about 63 dB or 72 dB of stopband attenuation to make your reconstruction brick wall filter have very solid bricks.
again, assuming for simplicity that $x[0]$ is your current sample, if the normalized delay is at least as long as $\tfrac{L}{2}$ samples, then
$$ \begin{align}
y_D(0) & \triangleq x(0-D) \\
& = \sum\limits_{n= -L/2 + 1}^{L/2} x[n - i_D] \cdot \operatorname{sinc}\left( n + f_D \right) w(n + f_D) \\
\\
& = \sum\limits_{n= -L+1}^{0} x[n + \tfrac{L}{2} - i_D)] \cdot \operatorname{sinc}\left(n + f_D + \tfrac{L}{2} \right) w(n + f_D + \tfrac{L}{2}) \\
\\
& = \sum\limits_{n= -L+1}^{0} x[n - (i_D-\tfrac{L}{2})] \cdot h_{f_D}[0-n] \\
\\
& = \sum\limits_{n=0}^{L-1} x[(\tfrac{L}{2}-i_D)-n] \cdot h_{f_D}[n] \\
\end{align} $$
that's a simple dot product of the $L$ samples from $x[-i_D-\tfrac{L}{2}+1]$ to $x[-i_D+\tfrac{L}{2}]$ with a set of FIR tap coefficients $h_{f_D}[n]$, (remember, here we're defining the most current sample as $x[0]$ and we know $x[0], x[-1], x[-2], ...$) and where $i_D$ is the integer part of the delay and $i_D \ge \tfrac{L}{2}$.
the FIR tap coefficients:
$$ h_{f_D}[n] = \operatorname{sinc}\left(-n + f_D + \tfrac{L}{2} \right) w(-n + f_D + \tfrac{L}{2}) \qquad 0 \le n \le L-1 $$
are dependent only on the fractional part $f_D$ of the delay.
so this is how you implement a precision delay of $\frac{D}{T}$ samples, or $D$ seconds of delay (assuming $T$ is expressed in seconds). in the continuous-time domain, this would be a delay of $D$ seconds with a Laplace transfer function of
$$H_D(s) \triangleq \frac{\mathscr{L}\{y_D(t)\}}{\mathscr{L}\{x(t)\}} =\frac{Y_D(s)}{X(s)} = e^{-sD} $$
which in the other partial answer would replace $z^{-1}$ in your Direct Form II filter structure to get you a comb filter with an IIR or FIR design of a digital low-pass filter $H(z)$.