From: Anders Kaseorg Date: Mon, 30 May 2011 03:05:29 GMT Subject: Re: [PATCH 3/3] gitk: Allow displaying time zones from author and commit timestamps Message-ID: In-Reply-To: <20110529044656.GA8881@brick.ozlabs.ibm.com> On Sun, 29 May 2011, Paul Mackerras wrote: > > @@ -11018,7 +11018,18 @@ proc prefsok {} { > > proc formatdate {d} { > > global datetimeformat > > if {$d ne {}} { > > - set d [clock format [lindex $d 0] -format $datetimeformat] > > + if {[string match {*%[zZ]*} $datetimeformat]} { > > + if {[catch {set d [clock format [lindex $d 0] -timezone [lindex $d 1] -format $datetimeformat]}]} { > > + # Tcl < 8.5 does not support -timezone. > > + global env > > + set zone [lindex $d 1] > > + set env(TZ) "IDK[string range $zone 0 2]:[string range $zone 3 end]" > > What is this about? Where is the IDK prefix for timezones defined or > described? Yeah, sorry, that deserved a bit more explanation. This is a kludge to get Tcl 8.4 to format dates in the right timezone. IDK is an arbitrary made up 3-letter code (“I Don’t Know”), since a UTC offset can’t generally be converted into a zone name. The format of TZ is described at: http://www.gnu.org/software/libc/manual/html_node/TZ-Variable.html http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html Actually, reading that again, I just realized that I need to invert the sign. Also that it can be longer than 3 letters; I’ll use “Unknown” instead. > > + set d [clock format [lindex $d 0] -format $datetimeformat] > > + unset env(TZ) > > Oops, we just lost any previous setting of TZ... Good point. Thanks for taking a look. I’ll follow up with a fixed version. Anders