[Bug] git-log prints wrong unixtime with --date=format:%s
- From
Michael Heerdegen <michael_heerdegen@web.de>
- Date
- May 16, 2016, 23:33 UTC
- Message-ID
- <87vb2d37ea.fsf@web.de>
Hello,
the command
git log --pretty=format:%ad --date=format:%s
displays wrong unixtime values; apparently how much the printed value differs from the expected value depends on the system's time zone and whether daylight savings time is enabled or not.
Here is a reproducible recipe compiled by Yuri Khan who helped me localizing the problem and whom I CC'd:
0. Versions
$ git --version
git version 2.8.2 $ dpkg -l tzdata | tail -1
ii tzdata 2016d-0ubuntu0.16.04 all time zone and
daylight-saving time data1. Initialize an empty Git repository:
$ git init test
$ cd test2. Make a commit, using the Europe/Berlin time zone:
$ TZ=Europe/Berlin git commit -m 'test' --allow-empty
3. Examine the timestamp recorded in the commit object:
$ git cat-file -p HEAD | grep author
author Yuri Khan <yurivkhan@gmail.com> 1463260938 +02004. Check that it corresponds to the current time:
$ date +%s
14632609775. Try to get the commit date in the unixtime format:
$ TZ=Europe/Berlin git log --pretty=format:%ad --date=format:%s -1
Expected result: 1463260938 (same as recorded in the commit object). Observed result: 1463264538 (3600s = one hour ahead).
For lulz, use another time zone:
$ TZ=Asia/Novosibirsk git log --pretty=format:%ad --date=format:%s -1
Expected result: 1463260938 (unixtime is always UTC and should not depend on TZ). Observed result: 1463246538 (-14400s = 4 hours behind).
Not even specifying the UTC time zone helps:
$ TZ=UTC git log --pretty=format:%ad --date=format:%s -1
Expected result: still 1463260938. Observed result: 1463268138 (7200s = 2 hours ahead).
FWIW, personally I have not bound the TZ environment variable, my time zone is constantly that of Berlin, currently CEST.
Many thanks in advance,
Michael.