• Linus Torvalds's avatar
    date/time: do not get confused by fractional seconds · 9f2b6d29
    Linus Torvalds authored
    The date/time parsing code was confused if the input time HH:MM:SS is
    followed by fractional seconds.  Since we do not record anything finer
    grained than seconds, we could just drop fractional part, but there is a
    We have taught people that not just spaces but dot can be used as word
    separators when spelling things like:
        $ git log --since 2.days
        $ git show @{12:34:56.7.days.ago}
    and we shouldn't mistake "7" in the latter example as a fraction and
    discard it.
    The rules are:
     - valid days of month/mday are always single or double digits.
     - valid years are either two or four digits
       No, we don't support the year 600 _anyway_, since our encoding is based
       on the UNIX epoch, and the day we worry about the year 10,000 is far
       away and we can raise the limit to five digits when we get closer.
     - Other numbers (eg "600 days ago") can have any number of digits, but
       they cannot start with a zero. Again, the only exception is for
       two-digit numbers, since that is fairly common for dates ("Dec 01" is
       not unheard of)
    So that means that any milli- or micro-second would be thrown out just
    because the number of digits shows that it cannot be an interesting date.
    A milli- or micro-second can obviously be a perfectly fine number
    according to the rules above, as long as it doesn't start with a '0'. So
    if we have
    then that '123' gets parsed as a number, and we remember it. But because
    it's bigger than 31, we'll never use it as such _unless_ there is
    something after it to trigger that use.
    So you can say "12:34:56.123.days.ago", and because of the "days", that
    123 will actually be meaninful now.
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
date.c 18.9 KB