Range checking and miscellaneous fixes tin time library

This primarily adds range-checking that was requested in #2350. This is done using a helper function match_digits_in_range.

%u takes a day of the week in the range of 1-7. However it was previously treated identically to %w that takes a value in the range 0-6. Similarly, %y takes only a two-digit year and thereby subtracting 1900 from it is wrong. This is also fixed.

Further, I have also fixed the error messages in a few places where it was wrong.