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_after. The response data also contains
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_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.