“Zulu timezone”
I've been using a pomodoro app that provides a REST API. Through this API, you can query past pomodoros using parameters such as ended_before
and ended_after
. The response data also contains started_at
and ended_at
fields.
The values for these fields all look like this: 2022-01-01T07:18:59.000Z
. And they are UTC time strings suffixed with a Z
. Correctly so, because it indicates this timestring is UTC.
There are fields named local_started_at
and local_ended_at
. Although those values are clearly not UTC, they are all suffixed with a Z
. This confused me a bit at first. (And it seems quite common for people to suffix Z
at the end of a time string, regardless of which timezone that time string actually is.)
The default timezone in a Docker container is UTC. The default timezone of AWS is also UTC. (I wrote a script to check just to be sure. But it's actually written somewhere in the documentation.)
Interestingly, Python does not support the letter Z
when you try to parse a timestring using datetime.fromisoformat
. But if you use +00:00
to mark a zero offset from UTC, it works and a datetime object with timezone info is returned.
>>> datetime.fromisoformat('1989-06-04T08:11:25.000Z') # ❌
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: Invalid isoformat string: '1989-06-04T08:11:25.000Z'
>>> datetime.fromisoformat('1989-06-04T08:11:25.000+00:00') # ✅
datetime.datetime(1989, 6, 4, 8, 11, 25, tzinfo=datetime.timezone.utc)
>>> datetime.fromisoformat('1989-06-04T08:11:25.000+02:00') # ✅
datetime.datetime(1989, 6, 4, 8, 11, 25,
tzinfo=datetime.timezone(datetime.timedelta(seconds=7200)))
Now I digress.
Z apparently stands for Zulu in “military timezones”. 25 letters are used to indicate the time difference from UTC. Although the Z timezone means UTC, the timezone where the actual Zulu people live has a offset of +02:00.
There are also India, Lima and Quebec in these military timezone names. Only Quebec indicates the actual timezone used in Quebec as daylight saving time.