What time is it?

Posted on Jan 19, 2010

Like many other people, I work with others who are spread around the globe. Figuring out when is a good time to call, what would be a sensible meeting time, etc. is always awkward - especially when the daylight savings rules keep changing.

Here’s a small script called wwt that I use to help understand what the time is:

{% highlight sh %} #!/bin/sh

Which timezones to report

zones=“UTC
Europe/London Europe/Paris
US/Eastern US/Central US/Mountain US/Pacific
Asia/Shanghai”

local="${TZ}" if [ “${TZ}” = "" ]; then local=cat /etc/timezone fi

a="$*"

If no time is specified, use now.

if [ “${a}” = "" ]; then a=date fi

Determine if the specified time makes sense and determine the ‘fully

qualified’ version of the specified time, i.e. including the date.

o="–date=TZ="${local}" ${a}" d=date "${o}" if [ “$?” -ne 0 ]; then echo “"${a}" makes no sense.” exit 1 fi

o="–date=TZ="${local}" ${d}"

for i in ${zones}; do t=TZ=${i} date "${o}" +"%l:%M%p" | tr '[A-Z]' '[a-z]' d=TZ=${i} date "${o}" +"%A %e %B %Y (%Z, %:::z)" s="${i}#${t}#${d}" echo ${s} done | awk -F# ‘{printf("%16s: %s %s\n", $1, $2, $3);}’ {% endhighlight %}

I use it in three ways: to find out what time it is now in various places (my local timezone is set to Europe/London, where it’s now 11:54pm):

{% highlight console %} $ wwt UTC: 11:54pm Tuesday 19 January 2010 (UTC, +00) Europe/London: 11:54pm Tuesday 19 January 2010 (GMT, +00) Europe/Paris: 12:54am Wednesday 20 January 2010 (CET, +01) US/Eastern: 6:54pm Tuesday 19 January 2010 (EST, -05) US/Central: 5:54pm Tuesday 19 January 2010 (CST, -06) US/Mountain: 4:54pm Tuesday 19 January 2010 (MST, -07) US/Pacific: 3:54pm Tuesday 19 January 2010 (PST, -08) Asia/Shanghai: 7:54am Wednesday 20 January 2010 (CST, +08) $ {% endhighlight %}

To find out what time it would be when it’s 8am here:

{% highlight console %} $ wwt 8am UTC: 8:00am Tuesday 19 January 2010 (UTC, +00) Europe/London: 8:00am Tuesday 19 January 2010 (GMT, +00) Europe/Paris: 9:00am Tuesday 19 January 2010 (CET, +01) US/Eastern: 3:00am Tuesday 19 January 2010 (EST, -05) US/Central: 2:00am Tuesday 19 January 2010 (CST, -06) US/Mountain: 1:00am Tuesday 19 January 2010 (MST, -07) US/Pacific: 12:00am Tuesday 19 January 2010 (PST, -08) Asia/Shanghai: 4:00pm Wednesday 20 January 2010 (CST, +08) $ {% endhighlight %}

To find out what time it would be when it’s 8am in US/Pacific:

{% highlight console %} $ TZ=US/Pacific wwt 8am UTC: 4:00pm Tuesday 19 January 2010 (UTC, +00) Europe/London: 4:00pm Tuesday 19 January 2010 (GMT, +00) Europe/Paris: 5:00pm Tuesday 19 January 2010 (CET, +01) US/Eastern: 11:00am Tuesday 19 January 2010 (EST, -05) US/Central: 10:00am Tuesday 19 January 2010 (CST, -06) US/Mountain: 9:00am Tuesday 19 January 2010 (MST, -07) US/Pacific: 8:00am Tuesday 19 January 2010 (PST, -08) Asia/Shanghai: 12:00am Thursday 21 January 2010 (CST, +08) $ {% endhighlight %}

It would still be nice if Google Calendar had decent timezone support, of course.

Update: Steve pointed out that the date for Europe/Paris was incorrect in the second two examples. Given that he was right, I fixed the script.