ZonedDateTime.parse constructor
ZonedDateTime.parse(
- String dateTimeString
Parses a ZonedDateTime from its string representation.
Supports multiple formats:
- ISO 8601 with timezone:
2023-12-25T15:30:00+01:00 - With zone ID:
2023-12-25T15:30:00+01:00[Europe/Paris] - UTC format:
2023-12-25T15:30:00Z - Offset only:
2023-12-25T15:30:00-05:00
Example:
// Various parsing formats
final iso = ZonedDateTime.parse('2023-12-25T15:30:00+01:00');
final withZone = ZonedDateTime.parse('2023-12-25T15:30:00[Europe/Paris]');
final utc = ZonedDateTime.parse('2023-12-25T15:30:00Z');
final offset = ZonedDateTime.parse('2023-12-25T15:30:00-05:00');
print('ISO: $iso');
print('With zone: $withZone');
print('UTC: $utc');
print('Offset: $offset');
Represents a date-time with timezone information.
This class combines a LocalDateTime with timezone information to represent a complete date-time with offset from UTC. Unlike Java's implementation, this version includes a built-in timezone database for common timezones without requiring external dependencies.
Key Features:
- Immutable: All operations return new instances
- Timezone Aware: Handles UTC offsets and common timezone names
- DST Support: Basic daylight saving time handling for major timezones
- Conversion: Easy conversion between timezones
- Formatting: ISO 8601 compliant string representation
Supported Timezone Formats:
- UTC Offsets:
+05:00,-08:00,Z(for UTC) - Timezone Names:
EST,PST,GMT,CET, etc. - Full Names:
America/New_York,Europe/London, etc.
Usage Examples:
// Create from current time
final now = ZonedDateTime.now();
final nowInParis = ZonedDateTime.now(ZoneId.of('Europe/Paris'));
// Create with specific date-time
final localDT = LocalDateTime.of(2023, 12, 25, 15, 30);
final christmas = ZonedDateTime.of(localDT, ZoneId.of('America/New_York'));
// Parse from string
final parsed = ZonedDateTime.parse('2023-12-25T15:30:00+01:00[Europe/Paris]');
// Convert between timezones
final utc = christmas.toUtc();
final tokyo = christmas.withZoneSameInstant(ZoneId.of('Asia/Tokyo'));
// Arithmetic operations
final tomorrow = christmas.plusDays(1);
final nextHour = christmas.plusHours(1);
Timezone Database:
This implementation includes a comprehensive timezone database with:
- Major world timezones with their UTC offsets
- Daylight saving time rules for common timezones
- Historical timezone data for accurate conversions
- Support for both abbreviated and full timezone names
Implementation
factory ZonedDateTime.parse(String dateTimeString) {
// Handle different parsing formats
String dateTimePart = dateTimeString;
String? zonePart;
String? offsetPart;
// Extract zone ID if present [Zone/ID]
final zoneMatch = RegExp(r'\[([^\]]+)\]').firstMatch(dateTimeString);
if (zoneMatch != null) {
zonePart = zoneMatch.group(1);
dateTimePart = dateTimeString.substring(0, zoneMatch.start);
}
// Extract offset (+HH:mm, -HH:mm, Z)
final offsetMatch = RegExp(r'([+-]\d{2}:?\d{2}|Z)$').firstMatch(dateTimePart);
if (offsetMatch != null) {
offsetPart = offsetMatch.group(1);
dateTimePart = dateTimePart.substring(0, offsetMatch.start);
}
// Parse the date-time part
final localDateTime = LocalDateTime.parse(dateTimePart);
// Determine the timezone
ZoneId zone;
if (zonePart != null) {
zone = ZoneId.of(zonePart);
} else if (offsetPart != null) {
if (offsetPart == 'Z') {
zone = ZoneId.UTC;
} else {
// Create a zone from offset
zone = ZoneId.of(offsetPart);
}
} else {
zone = ZoneId.UTC;
}
return ZonedDateTime.of(localDateTime, zone);
}