> > > Method 3
> > > * Changes offset randomly by +/- one minute on each update, but
> > > don't change the reported time if the chosen offset would cause it
> > > to retrogress.
> > >
> > > -5   -4   -3   -2   -1    0    1    2    3    4    5
> > > 9.2  9.4  9.6  9.3  9.1  8.8  9.1  9.0  8.8  8.8  9.0

I choose my offset through a dedicated class (WanderingWalker) that
works always in seconds.
Basicly I start from the current offset (or position) and I genereta a
target to reach (by default a random number between -300 + 300) after
that I begin moving my offset of 1 unit per every consumed second in
the direction of the target. So in one second my offset moves of +/- 1
second, in one minute moves of +/- 60 seconds and so on.
When I reach the given target offset I just generate another target to reach.
I choosed this approach because it forces the clock to reach smoothly
any generated target at any update rate, and, in theory, moving the
offset this way is possible to avoid the check against going back with
the time.
But since I'm lazy I didn't tested/verified my theory so I had to keep
this check in my code.

cheers

Paolo