Timezone and ISO 8601 — Date Format Standards for Software
Learn how ISO 8601 handles timezones with the Z suffix and offset notation. Understand the correct way to format dates with timezone information in APIs and databases.
Concepts
Detailed Explanation
ISO 8601 and Timezone Representation
ISO 8601 is the international standard for date and time representation. It is the most widely used format in APIs, databases, and data interchange.
Basic Format
2024-03-15T14:30:00Z # UTC (Zulu time)
2024-03-15T14:30:00+00:00 # UTC with explicit offset
2024-03-15T09:30:00-05:00 # US Eastern (winter)
2024-03-15T23:30:00+09:00 # Japan Standard Time
2024-03-15T20:00:00+05:30 # India Standard Time
The "Z" Suffix
The Z at the end stands for "Zulu time," the military designation for UTC. It is equivalent to +00:00:
2024-03-15T14:30:00Z
2024-03-15T14:30:00+00:00
// These represent the exact same instant
Offset Notation
ISO 8601 supports several offset formats:
+05:30 # Preferred (with colon)
+0530 # Basic format (without colon)
+05 # Hours only (when minutes are zero)
Z # UTC shorthand
What ISO 8601 Does NOT Include
ISO 8601 does not include:
- Timezone IDs (
America/New_York) — only offsets - Timezone abbreviations (
EST,PST) — ambiguous and non-standard - DST information — the offset reflects DST if active, but doesn't say so explicitly
This is why you often need to store both the ISO 8601 timestamp AND the IANA timezone ID:
{
"scheduledAt": "2024-03-15T14:30:00-05:00",
"timezone": "America/New_York"
}
RFC 3339 — The Internet Profile of ISO 8601
RFC 3339 is a stricter subset of ISO 8601 used in internet protocols. Key differences:
- Requires the
Tseparator (ISO 8601 allows a space) - Requires explicit timezone offset (no local time without offset)
- Uses
Zor+HH:MMoffset format only
RFC 3339: 2024-03-15T14:30:00Z
ISO 8601: 2024-03-15 14:30:00 (also valid, no timezone)
JavaScript and ISO 8601
// Parsing
const d = new Date("2024-03-15T14:30:00Z"); // Always UTC
// Generating
d.toISOString(); // "2024-03-15T14:30:00.000Z" (always UTC with Z)
// With timezone
d.toLocaleString("en-US", {
timeZone: "America/New_York",
dateStyle: "full",
timeStyle: "long",
});
// "Friday, March 15, 2024 at 10:30:00 AM EDT"
Use Case
ISO 8601 is the required format for most REST APIs, JSON data interchange, database timestamp columns, log file entries, and configuration files. Understanding how it encodes timezone information prevents parsing errors, incorrect time displays, and data loss when timestamps cross system boundaries.