The following code:
tmp = timespec->millisecond / 1000U;
sec = tmp % 60U;
min = (tmp - sec) % 3600U;
hour = ((tmp - sec) - (min * 60U)) / 3600U;
should be changed to:
sec = timespec->millisecond / 1000U;
hour = sec / 3600U;
sec %= 3600U;
min = sec / 60U;
sec %= 60U;
to get correct results
Fixed in rev.8091