Time zones vs offsets
A fixed +02:00 offset is not the same as a named zone like Europe/Paris.
An offset is a simple, fixed displacement from UTC at a single moment in time: +02:00 means “two hours ahead of UTC right now”. Z is shorthand for +00:00. An offset has no history, no future, and no name — it is just a number.
A time zone is a named set of rules that maps any given instant to an offset, including historical changes, future legislative decisions, and DST transitions. Europe/Paris is not always +01:00; it switches to +02:00 during Central European Summer Time. The rules are maintained in the IANA Time Zone Database and are updated several times per year as governments change their policies.
Why the difference matters
If you store only an offset, you lose the ability to correctly compute future local times. Suppose a meeting is scheduled for “10:00 +02:00 on January 15”. That stored offset cannot tell you whether the meeting was in Athens or Cairo — both sit at +02:00 in winter, but they diverge in summer (Europe/Athens springs forward to +03:00, and Egypt’s DST rules differ). Come July, the offset alone no longer pins down the local time. Only the named zone can answer the question.
Pitfall: Serialising a future appointment as an ISO 8601 string with a bare offset (e.g. 2027-03-15T10:00:00+01:00) and discarding the zone name. If the zone’s rules change before that date — which happens regularly — the stored offset no longer reflects the correct local time.
Go deeper: UTC is special; "local" is not a zone
UTC is not a time zone in the IANA sense — it has no DST, no legislative history, and no offset ambiguity. It is the reference to which all offsets are relative. Etc/UTC exists in the IANA database as a convenience entry but carries no rules beyond “always +00:00”.
Many environments surface a concept called “local time” or “system time”. This is not a named zone you can store — it resolves to whatever the host machine’s timezone happens to be at runtime. Never store “local” as a timezone identifier in a database; store the IANA name (e.g. America/New_York) explicitly.
Some abbreviations like EST, PST, or IST are dangerously ambiguous: IST is used for India Standard Time (+05:30), Irish Standard Time (+01:00), and Israel Standard Time (+02:00, +03:00 on daylight time). Never use abbreviations as timezone identifiers. Always use IANA names.
See DST & the edges for what happens at the moments an offset changes within a zone.