git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 1/2] UNIX reference time of 1970-01-01 00:00 is UTC timezone, not local time zone

From
APAndy Parkins <andyparkins@gmail.com>
Date
Jan 26, 2007, 08:58 UTC
Message-ID
<200701260858.48212.andyparkins@gmail.com>

I got bitten because in the UK (where one would expect 1970-01-01 00:00 to be UTC 0) some politicians decided to mess around with daylight savings time from 1968 to 1971; it was permanently BST (+0100). That means that on my computer the following is true:

$ date --date="1970-01-01 00:00" +"%F %T %z (%Z)" 1970-01-01 00:00:00 +0100 (BST)

This of course means that the --date argument to date is specified in local time, not UTC. So when the hooks--update script does this:

date=$(date --date="1970-01-01 00:00:00 +0000 $ts seconds")

It's actually saying (in my timezone) "1970-01-01 01:00:00 UTC" + $ts. Clearly this is wrong. The UNIX epoch started at midnight UTC not 1am UTC.

This leads to the tagged time in hooks--update being shown as one hour earlier than the true tagged time (in my timezone). The problem would be worse for other timezones. For a +1300 timezone on 1970-01-01, the tagged time would be 13 hours earlier. Oops.

The solution is to force the reference time to UTC, which is what this patch does. In my timezone:

$ date --date="1970-01-01 00:00 +0000" +"%F %T %z (%Z)" 1970-01-01 01:00:00 +0100 (BST)

Much better.
Signed-off-by: Andy Parkins <andyparkins@gmail.com>
---
 templates/hooks--update |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/templates/hooks--update b/templates/hooks--update
index 9863a80..81f706f 100644
--- a/templates/hooks--update
+++ b/templates/hooks--update
@@ -46,7 +46,7 @@ then
 		if [ "$ref_type" = tag ]; then
 			eval $(git cat-file tag $3 | \
 				sed -n '4s/tagger \([^>]*>\)[^0-9]*\([0-9]*\).*/tagger="\1" ts="\2"/p')
-			date=$(date --date="1970-01-01 00:00:00 $ts seconds" +"$date_format")
+			date=$(date --date="1970-01-01 00:00:00 +0000 $ts seconds" +"$date_format")
 			echo "Tag '$tag' created by $tagger at $date"
 			git cat-file tag $3 | sed -n '5,$p'
 			echo
-- 
1.5.0.rc2.g017f3
Next: Andy Parkins
Message 1 of 3 in “UNIX reference time of 1970-01-01 00:00 is UTC timezone, not local time zone”
  1. 1/2 UNIX reference time of 1970-01-01 00:00 is UTC timezone, not local time zoneAndy Parkins, Jan 26, 2007
  2. Andy ParkinsJan 26, 2007
  3. Simon 'corecode' SchubertJan 26, 2007

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.