# 📅 | Date & Time Formatting

## 🎯 Learning Objectives

- Understand date and time format variations across cultures
- Master date/time pattern strings and placeholders
- Handle 12-hour vs 24-hour time formats
- Format dates correctly for user's locale
- Avoid ambiguous date representations

## 🌍 The Date Format Challenge

<span style="white-space: pre-wrap;">The date </span>**"03/04/05"**<span style="white-space: pre-wrap;"> could mean:</span>

- 🇺🇸 March 4, 2005 (US: MM/DD/YY)
- 🇬🇧 April 3, 2005 (UK: DD/MM/YY)
- 🇯🇵 May 3, 2004 (Japan: YY/MM/DD)
- And many more interpretations!

#### ⚠️ Critical Insight

**There is no universal date format that works everywhere.**<span style="white-space: pre-wrap;"> A date written as </span>`<span class="editor-theme-code">12/01/2025</span>`<span style="white-space: pre-wrap;"> is ambiguous and will confuse international users. Always format dates according to the user's locale or use an unambiguous format like ISO 8601.</span>

### Common Date Format Patterns

<table id="bkmrk-region%2Flocaleshort-f" style="width: 100%; border-collapse: collapse;"><colgroup><col></col><col></col><col></col><col></col></colgroup><tbody><tr style="background: rgb(231, 76, 60); color: white;"><th class="align-left" style="padding: 0.75rem; text-align: left; border: 1px solid rgb(221, 221, 221);">Region/Locale

</th><th class="align-left" style="padding: 0.75rem; text-align: left; border: 1px solid rgb(221, 221, 221);">Short Format

</th><th class="align-left" style="padding: 0.75rem; text-align: left; border: 1px solid rgb(221, 221, 221);">Long Format

</th><th class="align-left" style="padding: 0.75rem; text-align: left; border: 1px solid rgb(221, 221, 221);">Pattern

</th></tr><tr><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">**US (en-US)**

</td><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">`<span class="editor-theme-code">11/5/2025</span>`

</td><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">November 5, 2025

</td><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">M/D/YYYY

</td></tr><tr style="background: rgb(248, 249, 250);"><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">**UK (en-GB)**

</td><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">`<span class="editor-theme-code">05/11/2025</span>`

</td><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">5 November 2025

</td><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">D/M/YYYY

</td></tr><tr><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">**Japan (ja-JP)**

</td><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">`<span class="editor-theme-code">2025/11/05</span>`

</td><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">2025年11月5日

</td><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">YYYY/M/D

</td></tr><tr style="background: rgb(248, 249, 250);"><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">**Germany (de-DE)**

</td><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">`<span class="editor-theme-code">05.11.2025</span>`

</td><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">5\. November 2025

</td><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">D.M.YYYY

</td></tr><tr><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">**China (zh-CN)**

</td><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">`<span class="editor-theme-code">2025/11/5</span>`

</td><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">2025年11月5日

</td><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">YYYY/M/D

</td></tr><tr style="background: rgb(248, 249, 250);"><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">**Korea (ko-KR)**

</td><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">`<span class="editor-theme-code">2025. 11. 5.</span>`

</td><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">2025년 11월 5일

</td><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">YYYY. M. D.

</td></tr><tr><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">**ISO 8601**

</td><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">`<span class="editor-theme-code">2025-11-05</span>`

</td><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">2025-11-05

</td><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">YYYY-MM-DD

</td></tr></tbody></table>

## 🕐 Time Format Variations

<span style="white-space: pre-wrap;">Time formatting varies primarily between </span>**12-hour (with AM/PM)**<span style="white-space: pre-wrap;"> and </span>**24-hour**<span style="white-space: pre-wrap;"> formats, but there are also differences in separators and period markers.</span>

### Time Format Examples (2:30 PM)

<table id="bkmrk-region%2Flocaleshort-t" style="width: 100%; border-collapse: collapse;"><colgroup><col></col><col></col><col></col><col></col></colgroup><tbody><tr style="background: rgb(231, 76, 60); color: white;"><th class="align-left" style="padding: 0.75rem; text-align: left; border: 1px solid rgb(221, 221, 221);">Region/Locale

</th><th class="align-left" style="padding: 0.75rem; text-align: left; border: 1px solid rgb(221, 221, 221);">Short Time

</th><th class="align-left" style="padding: 0.75rem; text-align: left; border: 1px solid rgb(221, 221, 221);">Long Time

</th><th class="align-left" style="padding: 0.75rem; text-align: left; border: 1px solid rgb(221, 221, 221);">Format Type

</th></tr><tr><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">**US (en-US)**

</td><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">`<span class="editor-theme-code">2:30 PM</span>`

</td><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">`<span class="editor-theme-code">2:30:00 PM</span>`

</td><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">12-hour

</td></tr><tr style="background: rgb(248, 249, 250);"><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">**UK (en-GB)**

</td><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">`<span class="editor-theme-code">14:30</span>`

</td><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">`<span class="editor-theme-code">14:30:00</span>`

</td><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">24-hour

</td></tr><tr><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">**Germany (de-DE)**

</td><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">`<span class="editor-theme-code">14:30</span>`

</td><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">`<span class="editor-theme-code">14:30:00</span>`

</td><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">24-hour

</td></tr><tr style="background: rgb(248, 249, 250);"><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">**Japan (ja-JP)**

</td><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">`<span class="editor-theme-code">14:30</span>`

</td><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">`<span class="editor-theme-code">14時30分00秒</span>`

</td><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">24-hour

</td></tr><tr><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">**India (hi-IN)**

</td><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">`<span class="editor-theme-code">2:30 pm</span>`

</td><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">`<span class="editor-theme-code">2:30:00 pm</span>`

</td><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">12-hour

</td></tr><tr style="background: rgb(248, 249, 250);"><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">**France (fr-FR)**

</td><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">`<span class="editor-theme-code">14:30</span>`

</td><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">`<span class="editor-theme-code">14:30:00</span>`

</td><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">24-hour

</td></tr></tbody></table>

#### 12-Hour Format Regions

- United States
- Canada (English)
- Australia
- Philippines
- India
- Pakistan

#### 24-Hour Format Regions

- Most of Europe
- Latin America
- Asia (China, Japan, Korea)
- Middle East
- Africa

## 💻 Implementation Guidelines

### JavaScript Examples

#### Date Formatting

```
const date = new Date('2025-11-05T14:30:00Z');

// US Format - Short
const usShort = new Intl.DateTimeFormat('en-US').format(date);
console.log(usShort);
// → "11/5/2025"

// US Format - Long
const usLong = new Intl.DateTimeFormat('en-US', {
  year: 'numeric',
  month: 'long',
  day: 'numeric'
}).format(date);
console.log(usLong);
// → "November 5, 2025"

// UK Format
const ukFormat = new Intl.DateTimeFormat('en-GB', {
  year: 'numeric',
  month: 'short',
  day: 'numeric'
}).format(date);
console.log(ukFormat);
// → "5 Nov 2025"

// German Format
const deFormat = new Intl.DateTimeFormat('de-DE', {
  year: 'numeric',
  month: 'long',
  day: 'numeric'
}).format(date);
console.log(deFormat);
// → "5. November 2025"

// Japanese Format
const jpFormat = new Intl.DateTimeFormat('ja-JP', {
  year: 'numeric',
  month: 'long',
  day: 'numeric'
}).format(date);
console.log(jpFormat);
// → "2025年11月5日"

// ISO 8601 (unambiguous, good for APIs)
console.log(date.toISOString());
// → "2025-11-05T14:30:00.000Z"
```

#### Time Formatting

```
const date = new Date('2025-11-05T14:30:00Z');

// US - 12-hour format with AM/PM
const usTime = new Intl.DateTimeFormat('en-US', {
  hour: 'numeric',
  minute: '2-digit',
  timeZoneName: 'short',
  timeZone: 'America/New_York'
}).format(date);
console.log(usTime);
// → "9:30 AM EST"

// UK - 24-hour format
const ukTime = new Intl.DateTimeFormat('en-GB', {
  hour: '2-digit',
  minute: '2-digit',
  timeZone: 'Europe/London'
}).format(date);
console.log(ukTime);
// → "14:30"

// With seconds
const timeWithSeconds = new Intl.DateTimeFormat('en-US', {
  hour: 'numeric',
  minute: '2-digit',
  second: '2-digit',
  hour12: true
}).format(date);
console.log(timeWithSeconds);
// → "9:30:00 AM"

// Force 24-hour format
const force24h = new Intl.DateTimeFormat('en-US', {
  hour: '2-digit',
  minute: '2-digit',
  hour12: false
}).format(date);
console.log(force24h);
// → "09:30"
```

#### Combined Date &amp; Time Formatting

```
const date = new Date('2025-11-05T14:30:00Z');

// Full date and time - US
const usFull = new Intl.DateTimeFormat('en-US', {
  year: 'numeric',
  month: 'long',
  day: 'numeric',
  hour: 'numeric',
  minute: '2-digit',
  timeZoneName: 'short',
  timeZone: 'America/Los_Angeles'
}).format(date);
console.log(usFull);
// → "November 5, 2025 at 6:30 AM PST"

// Full date and time - German
const deFull = new Intl.DateTimeFormat('de-DE', {
  year: 'numeric',
  month: 'long',
  day: 'numeric',
  hour: '2-digit',
  minute: '2-digit',
  timeZone: 'Europe/Berlin'
}).format(date);
console.log(deFull);
// → "5. November 2025, 15:30"

// Relative time formatting (modern browsers)
const rtf = new Intl.RelativeTimeFormat('en', { numeric: 'auto' });
console.log(rtf.format(-1, 'day'));    // → "yesterday"
console.log(rtf.format(2, 'week'));    // → "in 2 weeks"
console.log(rtf.format(-3, 'month'));  // → "3 months ago"
```

### Python Examples

#### Using Babel for Date/Time Formatting

```
from datetime import datetime
from babel.dates import format_date, format_time, format_datetime
import pytz

dt = datetime(2025, 11, 5, 14, 30, 0, tzinfo=pytz.UTC)

# Date formatting
us_date = format_date(dt, format='long', locale='en_US')
print(us_date)  # → "November 5, 2025"

uk_date = format_date(dt, format='long', locale='en_GB')
print(uk_date)  # → "5 November 2025"

de_date = format_date(dt, format='long', locale='de_DE')
print(de_date)  # → "5. November 2025"

jp_date = format_date(dt, format='long', locale='ja_JP')
print(jp_date)  # → "2025年11月5日"

# Time formatting
us_time = format_time(dt, format='short', locale='en_US')
print(us_time)  # → "2:30 PM"

uk_time = format_time(dt, format='short', locale='en_GB')
print(uk_time)  # → "14:30"

# Combined date and time
us_full = format_datetime(dt, format='full', locale='en_US')
print(us_full)
# → "Wednesday, November 5, 2025 at 2:30:00 PM GMT"

# Custom format patterns
custom = format_datetime(dt, "EEE, MMM d, yyyy 'at' h:mm a", locale='en_US')
print(custom)  # → "Wed, Nov 5, 2025 at 2:30 PM"
```

### Java Examples

#### Using java.time for Date/Time Formatting

```
import java.time.*;
import java.time.format.*;
import java.util.Locale;

ZonedDateTime dt = ZonedDateTime.of(
    2025, 11, 5, 14, 30, 0, 0,
    ZoneId.of("UTC")
);

// US Format
DateTimeFormatter usFormatter = DateTimeFormatter.ofLocalizedDate(
    FormatStyle.LONG
).withLocale(Locale.US);
System.out.println(dt.format(usFormatter));
// → "November 5, 2025"

// German Format
DateTimeFormatter deFormatter = DateTimeFormatter.ofLocalizedDate(
    FormatStyle.LONG
).withLocale(Locale.GERMANY);
System.out.println(dt.format(deFormatter));
// → "5. November 2025"

// Time with US 12-hour format
DateTimeFormatter usTimeFormatter = DateTimeFormatter.ofLocalizedTime(
    FormatStyle.SHORT
).withLocale(Locale.US);
System.out.println(dt.format(usTimeFormatter));
// → "2:30 PM"

// Custom pattern
DateTimeFormatter customFormatter = DateTimeFormatter.ofPattern(
    "EEE, MMM d, yyyy 'at' h:mm a",
    Locale.US
);
System.out.println(dt.format(customFormatter));
// → "Wed, Nov 5, 2025 at 2:30 PM"
```

## 📝 Common Date/Time Format Patterns

When you need custom formats, most libraries use similar pattern strings based on Unicode LDML.

### Pattern Reference

<table id="bkmrk-symbolmeaningexample" style="width: 100%; border-collapse: collapse;"><colgroup><col></col><col></col><col></col></colgroup><tbody><tr style="background: rgb(231, 76, 60); color: white;"><th class="align-left" style="padding: 0.75rem; text-align: left; border: 1px solid rgb(221, 221, 221);">Symbol

</th><th class="align-left" style="padding: 0.75rem; text-align: left; border: 1px solid rgb(221, 221, 221);">Meaning

</th><th class="align-left" style="padding: 0.75rem; text-align: left; border: 1px solid rgb(221, 221, 221);">Example

</th></tr><tr><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">`<span class="editor-theme-code">y / yyyy</span>`

</td><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">Year

</td><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">2025

</td></tr><tr style="background: rgb(248, 249, 250);"><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">`<span class="editor-theme-code">M / MM</span>`

</td><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">Month (numeric)

</td><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">11 / 11

</td></tr><tr><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">`<span class="editor-theme-code">MMM / MMMM</span>`

</td><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">Month (text)

</td><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">Nov / November

</td></tr><tr style="background: rgb(248, 249, 250);"><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">`<span class="editor-theme-code">d / dd</span>`

</td><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">Day of month

</td><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">5 / 05

</td></tr><tr><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">`<span class="editor-theme-code">E / EEEE</span>`

</td><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">Day of week

</td><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">Wed / Wednesday

</td></tr><tr style="background: rgb(248, 249, 250);"><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">`<span class="editor-theme-code">h / hh</span>`

</td><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">Hour (12-hour)

</td><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">2 / 02

</td></tr><tr><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">`<span class="editor-theme-code">H / HH</span>`

</td><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">Hour (24-hour)

</td><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">14 / 14

</td></tr><tr style="background: rgb(248, 249, 250);"><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">`<span class="editor-theme-code">m / mm</span>`

</td><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">Minute

</td><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">30 / 30

</td></tr><tr><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">`<span class="editor-theme-code">s / ss</span>`

</td><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">Second

</td><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">0 / 00

</td></tr><tr style="background: rgb(248, 249, 250);"><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">`<span class="editor-theme-code">a</span>`

</td><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">AM/PM marker

</td><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">PM

</td></tr><tr><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">`<span class="editor-theme-code">z / zzzz</span>`

</td><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">Time zone

</td><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">PST / Pacific Standard Time

</td></tr></tbody></table>

**Example:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">"MMM d, yyyy 'at' h:mm a"</span>`<span style="white-space: pre-wrap;"> → </span>`<span class="editor-theme-code">"Nov 5, 2025 at 2:30 PM"</span>`

## ⚠️ Common Pitfalls &amp; Solutions

#### ❌ Pitfall 1: Ambiguous Numeric Dates

**Problem:**<span style="white-space: pre-wrap;"> Dates like </span>`<span class="editor-theme-code">03/04/2025</span>`<span style="white-space: pre-wrap;"> are ambiguous.</span>

**✅ Solution:**<span style="white-space: pre-wrap;"> Use long format with month names (</span>`<span class="editor-theme-code">"March 4, 2025"</span>`<span style="white-space: pre-wrap;"> or </span>`<span class="editor-theme-code">"4 March 2025"</span>`) or ISO 8601 (`<span class="editor-theme-code">2025-03-04</span>`) for unambiguous display.

#### ❌ Pitfall 2: Hard-coded Date Formats

```
// ❌ Wrong: Hard-coded format
const dateStr = `${month}/${day}/${year}`;  // US-only!

// ✅ Right: Locale-aware formatting
const dateStr = new Intl.DateTimeFormat(userLocale, {
  year: 'numeric',
  month: 'numeric',
  day: 'numeric'
}).format(date);
```

#### ❌ Pitfall 3: Ignoring User's Time Zone

**Problem:**<span style="white-space: pre-wrap;"> Displaying </span>`<span class="editor-theme-code">"Meeting at 3:00 PM"</span>`<span style="white-space: pre-wrap;"> without specifying the time zone confuses remote users.</span>

**✅ Solution:**<span style="white-space: pre-wrap;"> Always include the time zone name when displaying times: </span>`<span class="editor-theme-code">"3:00 PM EST"</span>`<span style="white-space: pre-wrap;"> or convert to user's local time.</span>

## 🎯 Best Practices Checklist

<table id="bkmrk-practicepriority%E2%9C%85-us" style="width: 100%; border-collapse: collapse;"><colgroup><col style="width: 60%;"></col><col></col></colgroup><tbody><tr style="background: rgb(231, 76, 60); color: white;"><th class="align-left" style="padding: 0.75rem; text-align: left; border: 1px solid rgb(221, 221, 221); width: 60%;">Practice

</th><th class="align-center" style="padding: 0.75rem; text-align: center; border: 1px solid rgb(221, 221, 221);">Priority

</th></tr><tr><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">✅ Use locale-aware date/time formatting libraries

</td><td class="align-center" style="background: rgb(231, 76, 60); padding: 0.75rem; border: 1px solid rgb(221, 221, 221); text-align: center; color: white;">**CRITICAL**

</td></tr><tr style="background: rgb(248, 249, 250);"><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">✅ Store dates in UTC (see Time Zones topic)

</td><td class="align-center" style="background: rgb(231, 76, 60); padding: 0.75rem; border: 1px solid rgb(221, 221, 221); text-align: center; color: white;">**CRITICAL**

</td></tr><tr><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">✅ Use month names or ISO 8601 to avoid ambiguity

</td><td class="align-center" style="background: rgb(243, 156, 18); padding: 0.75rem; border: 1px solid rgb(221, 221, 221); text-align: center; color: white;">**HIGH**

</td></tr><tr style="background: rgb(248, 249, 250);"><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">✅ Always display time zone when showing times

</td><td class="align-center" style="background: rgb(243, 156, 18); padding: 0.75rem; border: 1px solid rgb(221, 221, 221); text-align: center; color: white;">**HIGH**

</td></tr><tr><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">✅ Respect user's 12-hour vs 24-hour preference

</td><td class="align-center" style="background: rgb(52, 152, 219); padding: 0.75rem; border: 1px solid rgb(221, 221, 221); text-align: center; color: white;">**MEDIUM**

</td></tr><tr style="background: rgb(248, 249, 250);"><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">✅ Test with multiple locales (US, UK, German, Japanese)

</td><td class="align-center" style="background: rgb(243, 156, 18); padding: 0.75rem; border: 1px solid rgb(221, 221, 221); text-align: center; color: white;">**HIGH**

</td></tr><tr><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">✅ Use relative times where appropriate ("2 hours ago")

</td><td class="align-center" style="background: rgb(52, 152, 219); padding: 0.75rem; border: 1px solid rgb(221, 221, 221); text-align: center; color: white;">**MEDIUM**

</td></tr><tr style="background: rgb(248, 249, 250);"><td style="padding: 0.75rem; border: 1px solid rgb(221, 221, 221);">✅ Provide date pickers that respect locale formats

</td><td class="align-center" style="background: rgb(243, 156, 18); padding: 0.75rem; border: 1px solid rgb(221, 221, 221); text-align: center; color: white;">**HIGH**

</td></tr></tbody></table>

## 📚 Additional Resources

- **ISO 8601:**<span style="white-space: pre-wrap;"> International date/time standard</span>
- **Unicode LDML:**<span style="white-space: pre-wrap;"> Locale Data Markup Language for date patterns</span>
- **Intl.DateTimeFormat (JavaScript):**<span style="white-space: pre-wrap;"> MDN documentation</span>
- **Babel (Python):**<span style="white-space: pre-wrap;"> Date and time formatting</span>
- **java.time (Java):**<span style="white-space: pre-wrap;"> Modern date-time API</span>
- **Moment.js / Luxon:**<span style="white-space: pre-wrap;"> Popular JavaScript date libraries</span>

**Next Topic:**<span style="white-space: pre-wrap;"> Language &amp; Region Identifiers →</span>