Date & Time
DateTime Formatting
When displaying dates to users or parsing date strings from input, you need flexible formatting. DateTimeFormatter supports both standard ISO formats and custom patterns for any locale or display requirement.
DateTime formatting converts date/time objects to human-readable strings using patterns. Java uses DateTimeFormatter for flexible formatting.
ISO Formatters
Iso.java
Replay: real traced execution (multi-file project)
// ISO format
import java.time.LocalDateTime;
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.ZonedDateTime;
import java.time.Instant;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
public class Iso {
public static void main(String[] args) {
LocalDateTime dt = LocalDateTime.of(2025, 1, 29, 14, 30, 45);
LocalDate date = dt.toLocalDate();
LocalTime time = dt.toLocalTime();
// ISO date
System.out.println("ISO Date formats:");
System.out.println("ISO_LOCAL_DATE: " + date.format(DateTimeFormatter.ISO_LOCAL_DATE));
System.out.println("ISO_DATE: " + date.format(DateTimeFormatter.ISO_DATE));
System.out.println("BASIC_ISO_DATE: " + date.format(DateTimeFormatter.BASIC_ISO_DATE));
// ISO time
System.out.println("\nISO Time formats:");
System.out.println("ISO_LOCAL_TIME: " + time.format(DateTimeFormatter.ISO_LOCAL_TIME));
System.out.println("ISO_TIME: " + time.format(DateTimeFormatter.ISO_TIME));
// ISO datetime
System.out.println("\nISO DateTime formats:");
System.out.println("ISO_LOCAL_DATE_TIME: " + dt.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME));
System.out.println("ISO_DATE_TIME: " + dt.format(DateTimeFormatter.ISO_DATE_TIME));
// Zoned datetime
ZonedDateTime zdt = ZonedDateTime.of(dt, ZoneId.of("UTC"));
System.out.println("\nZoned DateTime:");
System.out.println("ISO_ZONED_DATE_TIME: " + zdt.format(DateTimeFormatter.ISO_ZONED_DATE_TIME));
System.out.println("ISO_OFFSET_DATE_TIME: " + zdt.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME));
// Instant
Instant instant = Instant.parse("2025-01-29T14:30:45Z");
System.out.println("\nInstant:");
System.out.println("ISO_INSTANT: " + instant.toString());
// Parse ISO formats
System.out.println("\nParse ISO formats:");
String isoDate = "2025-01-29";
LocalDate parsedDate = LocalDate.parse(isoDate, DateTimeFormatter.ISO_LOCAL_DATE);
System.out.println("Parsed date: " + parsedDate);
String isoTime = "14:30:45";
LocalTime parsedTime = LocalTime.parse(isoTime, DateTimeFormatter.ISO_LOCAL_TIME);
System.out.println("Parsed time: " + parsedTime);
String isoDateTime = "2025-01-29T14:30:45";
LocalDateTime parsedDt = LocalDateTime.parse(isoDateTime, DateTimeFormatter.ISO_LOCAL_DATE_TIME);
System.out.println("Parsed datetime: " + parsedDt);
// Compact formats
System.out.println("\nCompact formats:");
System.out.println("BASIC_ISO_DATE: " + date.format(DateTimeFormatter.BASIC_ISO_DATE)); // 20250129
// Custom ISO-like
DateTimeFormatter customIso = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss");
System.out.println("Custom ISO: " + dt.format(customIso));
// RFC 1123 (for HTTP headers)
System.out.println("\nRFC 1123:");
System.out.println(zdt.format(DateTimeFormatter.RFC_1123_DATE_TIME));
}
}
dt ← 2025-01-29T14:30:45, date ← 2025-01-29, time ← 14:30:45, zdt ← 2025-01-29T14:30:45Z[UTC]
13public static void main(String[] args) {14 LocalDateTime dt→ 2025-01-29T14:30:45 = LocalDateTime.of(2025, 1, 29, 14, 30, 45);15 LocalDate date→ 2025-01-29 = dt.toLocalDate();16 LocalTime time→ 14:30:45 = dt.toLocalTime();17 18 // ISO date19 System.out.println("ISO Date formats:");20 System.out.println("ISO_LOCAL_DATE: " + date.format(DateTimeFormatter.ISO_LOCAL_DATE));21 System.out.println("ISO_DATE: " + date.format(DateTimeFormatter.ISO_DATE));22 System.out.println("BASIC_ISO_DATE: " + date.format(DateTimeFormatter.BASIC_ISO_DATE));2324 // ISO time25 System.out.println("\nISO Time formats:");26 System.out.println("ISO_LOCAL_TIME: " + time.format(DateTimeFormatter.ISO_LOCAL_TIME));27 System.out.println("ISO_TIME: " + time.format(DateTimeFormatter.ISO_TIME));2829 // ISO datetime30 System.out.println("\nISO DateTime formats:");31 System.out.println("ISO_LOCAL_DATE_TIME: " + dt.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME));32 System.out.println("ISO_DATE_TIME: " + dt.format(DateTimeFormatter.ISO_DATE_TIME));3334 // Zoned datetime35 ZonedDateTime zdt→ 2025-01-29T14:30:45Z[UTC] = ZonedDateTime.of(dt2025-01-29T14:30:45, ZoneId.of("UTC"));36 System.out.println("\nZoned DateTime:");37 System.out.println("ISO_ZONED_DATE_TIME: " + zdt.format(DateTimeFormatter.ISO_ZONED_DATE_TIME));38 System.out.println("ISO_OFFSET_DATE_TIME: " + zdt.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME));3940 // Instant41 Instant instant→ 2025-01-29T14:30:45Z = Instant.parse("2025-01-29T14:30:45Z");42 System.out.println("\nInstant:");43 System.out.println("ISO_INSTANT: " + instant.toString());4445 // Parse ISO formats46 System.out.println("\nParse ISO formats:");47 48 String isoDate→ 2025-01-29 = "2025-01-29";49 LocalDate parsedDate→ 2025-01-29 = LocalDate.parse(isoDate2025-01-29, DateTimeFormatter.ISO_LOCAL_DATE);50 System.out.println("Parsed date: " + parsedDate2025-01-29);51 52 String isoTime→ 14:30:45 = "14:30:45";53 LocalTime parsedTime→ 14:30:45 = LocalTime.parse(isoTime14:30:45, DateTimeFormatter.ISO_LOCAL_TIME);54 System.out.println("Parsed time: " + parsedTime14:30:45);55 56 String isoDateTime→ 2025-01-29T14:30:45 = "2025-01-29T14:30:45";57 LocalDateTime parsedDt→ 2025-01-29T14:30:45 = LocalDateTime.parse(isoDateTime2025-01-29T14:30:45, DateTimeFormatter.ISO_LOCAL_DATE_TIME);58 System.out.println("Parsed datetime: " + parsedDt2025-01-29T14:30:45);5960 // Compact formats61 System.out.println("\nCompact formats:");62 System.out.println("BASIC_ISO_DATE: " + date.format(DateTimeFormatter.BASIC_ISO_DATE)); // 2025012963 64 // Custom ISO-like65 DateTimeFormatter customIso→ Value(YearOfEra,4,19,EXCEEDS_PAD)'-'Value(MonthOfYear,2)'-'Value(DayOfMonth,2)'T'Value(HourOfDay,2)':'Value(MinuteOfHour,2)':'Value(SecondOfMinute,2) = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss");66 System.out.println("Custom ISO: " + dt.format(customIsoValue(YearOfEra,4,19,EXCEEDS_PAD)'-'Value(MonthOfYear,2)'-'Value(DayOfMonth,2)'T'Value(HourOfDay,2)':'Value(MinuteOfHour,2)':'Value(SecondOfMinute,2)));6768 // RFC 1123 (for HTTP headers)69 System.out.println("\nRFC 1123:");70 System.out.println(zdt.format(DateTimeFormatter.RFC_1123_DATE_TIME));71}outputISO Date formats: ISO_LOCAL_DATE: 2025-01-29 ISO_DATE: 2025-01-29 BASIC_ISO_DATE: 20250129 ISO Time formats: ISO_LOCAL_TIME: 14:30:45 ISO_TIME: 14:30:45 ISO DateTime formats: ISO_LOCAL_DATE_TIME: 2025-01-29T14:30:45 ISO_DATE_TIME: 2025-01-29T14:30:45 Zoned DateTime: ISO_ZONED_DATE_TIME: 2025-01-29T14:30:45Z[UTC] ISO_OFFSET_DATE_TIME: 2025-01-29T14:30:45Z Instant: ISO_INSTANT: 2025-01-29T14:30:45Z Parse ISO formats: Parsed date: 2025-01-29 Parsed time: 14:30:45 Parsed datetime: 2025-01-29T14:30:45 Compact formats: BASIC_ISO_DATE: 20250129 Custom ISO: 2025-01-29T14:30:45 RFC 1123: Wed, 29 Jan 2025 14:30:45 GMT
DateTimeFormatter
A formatter for printing and parsing date-time objects using predefined or custom patterns.
Custom Patterns
Patterns.java
Replay: real traced execution (multi-file project)
// Custom patterns
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class Patterns {
public static void main(String[] args) {
LocalDateTime dt = LocalDateTime.of(2025, 1, 29, 14, 30, 45);
System.out.println("DateTime: " + dt);
System.out.println();
// Year patterns
System.out.println("Year patterns:");
System.out.println("yyyy: " + dt.format(DateTimeFormatter.ofPattern("yyyy")));
System.out.println("yy: " + dt.format(DateTimeFormatter.ofPattern("yy")));
// Month patterns
System.out.println("\nMonth patterns:");
System.out.println("MM: " + dt.format(DateTimeFormatter.ofPattern("MM")));
System.out.println("M: " + dt.format(DateTimeFormatter.ofPattern("M")));
System.out.println("MMM: " + dt.format(DateTimeFormatter.ofPattern("MMM", Locale.US)));
System.out.println("MMMM: " + dt.format(DateTimeFormatter.ofPattern("MMMM", Locale.US)));
// Day patterns
System.out.println("\nDay patterns:");
System.out.println("dd: " + dt.format(DateTimeFormatter.ofPattern("dd")));
System.out.println("d: " + dt.format(DateTimeFormatter.ofPattern("d")));
System.out.println("DDD: " + dt.format(DateTimeFormatter.ofPattern("DDD"))); // day of year
// Day of week
System.out.println("\nDay of week:");
System.out.println("E: " + dt.format(DateTimeFormatter.ofPattern("E", Locale.US)));
System.out.println("EEEE: " + dt.format(DateTimeFormatter.ofPattern("EEEE", Locale.US)));
// Hour patterns
System.out.println("\nHour patterns:");
System.out.println("HH: " + dt.format(DateTimeFormatter.ofPattern("HH"))); // 24-hour
System.out.println("H: " + dt.format(DateTimeFormatter.ofPattern("H")));
System.out.println("hh: " + dt.format(DateTimeFormatter.ofPattern("hh"))); // 12-hour
System.out.println("h: " + dt.format(DateTimeFormatter.ofPattern("h")));
// AM/PM
System.out.println("\nAM/PM:");
System.out.println("a: " + dt.format(DateTimeFormatter.ofPattern("a", Locale.US)));
System.out.println("hh:mm a: " + dt.format(DateTimeFormatter.ofPattern("hh:mm a", Locale.US)));
// Minute and second
System.out.println("\nMinute and second:");
System.out.println("mm: " + dt.format(DateTimeFormatter.ofPattern("mm")));
System.out.println("ss: " + dt.format(DateTimeFormatter.ofPattern("ss")));
// Combined patterns
System.out.println("\nCombined patterns:");
System.out.println("yyyy-MM-dd: " + dt.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
System.out.println("dd/MM/yyyy: " + dt.format(DateTimeFormatter.ofPattern("dd/MM/yyyy")));
System.out.println("MMM dd, yyyy: " + dt.format(DateTimeFormatter.ofPattern("MMM dd, yyyy", Locale.US)));
System.out.println("EEEE, MMMM dd, yyyy: " + dt.format(DateTimeFormatter.ofPattern("EEEE, MMMM dd, yyyy", Locale.US)));
System.out.println("yyyy-MM-dd HH:mm:ss: " + dt.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
System.out.println("dd/MM/yyyy hh:mm a: " + dt.format(DateTimeFormatter.ofPattern("dd/MM/yyyy hh:mm a", Locale.US)));
// Literal text in pattern
System.out.println("\nLiteral text:");
System.out.println("'Date:' yyyy-MM-dd: " + dt.format(DateTimeFormatter.ofPattern("'Date:' yyyy-MM-dd")));
System.out.println("'at' HH:mm: " + dt.format(DateTimeFormatter.ofPattern("'at' HH:mm")));
// Reusable formatter
DateTimeFormatter customFormatter = DateTimeFormatter.ofPattern("EEEE, MMM dd, yyyy 'at' hh:mm a", Locale.US);
System.out.println("\nCustom formatter:");
System.out.println(dt.format(customFormatter));
// Different locales
System.out.println("\nLocale patterns:");
DateTimeFormatter usFormat = DateTimeFormatter.ofPattern("MMM dd, yyyy", Locale.US);
DateTimeFormatter frFormat = DateTimeFormatter.ofPattern("dd MMM yyyy", Locale.FRENCH);
System.out.println("US: " + dt.format(usFormat));
System.out.println("French: " + dt.format(frFormat));
}
}
// Custom patterns
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class Patterns {
public static void main(String[] args) {
LocalDateTime dt = LocalDateTime.of(2024, 7, 4, 9, 5, 0);
System.out.println("DateTime: " + dt);
System.out.println();
// Year patterns
System.out.println("Year patterns:");
System.out.println("yyyy: " + dt.format(DateTimeFormatter.ofPattern("yyyy")));
System.out.println("yy: " + dt.format(DateTimeFormatter.ofPattern("yy")));
// Month patterns
System.out.println("\nMonth patterns:");
System.out.println("MM: " + dt.format(DateTimeFormatter.ofPattern("MM")));
System.out.println("M: " + dt.format(DateTimeFormatter.ofPattern("M")));
System.out.println("MMM: " + dt.format(DateTimeFormatter.ofPattern("MMM", Locale.US)));
System.out.println("MMMM: " + dt.format(DateTimeFormatter.ofPattern("MMMM", Locale.US)));
// Day patterns
System.out.println("\nDay patterns:");
System.out.println("dd: " + dt.format(DateTimeFormatter.ofPattern("dd")));
System.out.println("d: " + dt.format(DateTimeFormatter.ofPattern("d")));
System.out.println("DDD: " + dt.format(DateTimeFormatter.ofPattern("DDD"))); // day of year
// Day of week
System.out.println("\nDay of week:");
System.out.println("E: " + dt.format(DateTimeFormatter.ofPattern("E", Locale.US)));
System.out.println("EEEE: " + dt.format(DateTimeFormatter.ofPattern("EEEE", Locale.US)));
// Hour patterns
System.out.println("\nHour patterns:");
System.out.println("HH: " + dt.format(DateTimeFormatter.ofPattern("HH"))); // 24-hour
System.out.println("H: " + dt.format(DateTimeFormatter.ofPattern("H")));
System.out.println("hh: " + dt.format(DateTimeFormatter.ofPattern("hh"))); // 12-hour
System.out.println("h: " + dt.format(DateTimeFormatter.ofPattern("h")));
// AM/PM
System.out.println("\nAM/PM:");
System.out.println("a: " + dt.format(DateTimeFormatter.ofPattern("a", Locale.US)));
System.out.println("hh:mm a: " + dt.format(DateTimeFormatter.ofPattern("hh:mm a", Locale.US)));
// Minute and second
System.out.println("\nMinute and second:");
System.out.println("mm: " + dt.format(DateTimeFormatter.ofPattern("mm")));
System.out.println("ss: " + dt.format(DateTimeFormatter.ofPattern("ss")));
// Combined patterns
System.out.println("\nCombined patterns:");
System.out.println("yyyy-MM-dd: " + dt.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
System.out.println("dd/MM/yyyy: " + dt.format(DateTimeFormatter.ofPattern("dd/MM/yyyy")));
System.out.println("MMM dd, yyyy: " + dt.format(DateTimeFormatter.ofPattern("MMM dd, yyyy", Locale.US)));
System.out.println("EEEE, MMMM dd, yyyy: " + dt.format(DateTimeFormatter.ofPattern("EEEE, MMMM dd, yyyy", Locale.US)));
System.out.println("yyyy-MM-dd HH:mm:ss: " + dt.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
System.out.println("dd/MM/yyyy hh:mm a: " + dt.format(DateTimeFormatter.ofPattern("dd/MM/yyyy hh:mm a", Locale.US)));
// Literal text in pattern
System.out.println("\nLiteral text:");
System.out.println("'Date:' yyyy-MM-dd: " + dt.format(DateTimeFormatter.ofPattern("'Date:' yyyy-MM-dd")));
System.out.println("'at' HH:mm: " + dt.format(DateTimeFormatter.ofPattern("'at' HH:mm")));
// Reusable formatter
DateTimeFormatter customFormatter = DateTimeFormatter.ofPattern("EEEE, MMM dd, yyyy 'at' hh:mm a", Locale.US);
System.out.println("\nCustom formatter:");
System.out.println(dt.format(customFormatter));
// Different locales
System.out.println("\nLocale patterns:");
DateTimeFormatter usFormat = DateTimeFormatter.ofPattern("MMM dd, yyyy", Locale.US);
DateTimeFormatter frFormat = DateTimeFormatter.ofPattern("dd MMM yyyy", Locale.FRENCH);
System.out.println("US: " + dt.format(usFormat));
System.out.println("French: " + dt.format(frFormat));
}
}
dt ← 2025-01-29T14:30:45, customFormatter ← Text(DayOfWeek)','' 'Text(MonthOfYear,SHORT)' 'Value(DayOfMonth,2)','' 'Value(YearOfEra,4,19,EXCEEDS_PAD)' ''at'' 'Value(ClockHourOfAmPm,2)':'Value(MinuteOfHour,2)' 'Text(AmPmOfDay,SHORT)
9public static void main(String[] args) {10 LocalDateTime dt→ 2025-01-29T14:30:45 = LocalDateTime.of(2025, 1, 29, 14, 30, 45); //@dt=LocalDateTime.of(2025, 1, 29, 14, 30, 45), LocalDateTime.of(2024, 7, 4, 9, 5, 0)11 12 System.out.println("DateTime: " + dt2025-01-29T14:30:45);13 System.out.println();1415 // Year patterns16 System.out.println("Year patterns:");17 System.out.println("yyyy: " + dt.format(DateTimeFormatter.ofPattern("yyyy")));18 System.out.println("yy: " + dt.format(DateTimeFormatter.ofPattern("yy")));1920 // Month patterns21 System.out.println("\nMonth patterns:");22 System.out.println("MM: " + dt.format(DateTimeFormatter.ofPattern("MM")));23 System.out.println("M: " + dt.format(DateTimeFormatter.ofPattern("M")));24 System.out.println("MMM: " + dt.format(DateTimeFormatter.ofPattern("MMM", Locale.US)));25 System.out.println("MMMM: " + dt.format(DateTimeFormatter.ofPattern("MMMM", Locale.US)));2627 // Day patterns28 System.out.println("\nDay patterns:");29 System.out.println("dd: " + dt.format(DateTimeFormatter.ofPattern("dd")));30 System.out.println("d: " + dt.format(DateTimeFormatter.ofPattern("d")));31 System.out.println("DDD: " + dt.format(DateTimeFormatter.ofPattern("DDD"))); // day of year3233 // Day of week34 System.out.println("\nDay of week:");35 System.out.println("E: " + dt.format(DateTimeFormatter.ofPattern("E", Locale.US)));36 System.out.println("EEEE: " + dt.format(DateTimeFormatter.ofPattern("EEEE", Locale.US)));3738 // Hour patterns39 System.out.println("\nHour patterns:");40 System.out.println("HH: " + dt.format(DateTimeFormatter.ofPattern("HH"))); // 24-hour41 System.out.println("H: " + dt.format(DateTimeFormatter.ofPattern("H")));42 System.out.println("hh: " + dt.format(DateTimeFormatter.ofPattern("hh"))); // 12-hour43 System.out.println("h: " + dt.format(DateTimeFormatter.ofPattern("h")));4445 // AM/PM46 System.out.println("\nAM/PM:");47 System.out.println("a: " + dt.format(DateTimeFormatter.ofPattern("a", Locale.US)));48 System.out.println("hh:mm a: " + dt.format(DateTimeFormatter.ofPattern("hh:mm a", Locale.US)));4950 // Minute and second51 System.out.println("\nMinute and second:");52 System.out.println("mm: " + dt.format(DateTimeFormatter.ofPattern("mm")));53 System.out.println("ss: " + dt.format(DateTimeFormatter.ofPattern("ss")));5455 // Combined patterns56 System.out.println("\nCombined patterns:");57 System.out.println("yyyy-MM-dd: " + dt.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));58 System.out.println("dd/MM/yyyy: " + dt.format(DateTimeFormatter.ofPattern("dd/MM/yyyy")));59 System.out.println("MMM dd, yyyy: " + dt.format(DateTimeFormatter.ofPattern("MMM dd, yyyy", Locale.US)));60 System.out.println("EEEE, MMMM dd, yyyy: " + dt.format(DateTimeFormatter.ofPattern("EEEE, MMMM dd, yyyy", Locale.US)));61 System.out.println("yyyy-MM-dd HH:mm:ss: " + dt.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));62 System.out.println("dd/MM/yyyy hh:mm a: " + dt.format(DateTimeFormatter.ofPattern("dd/MM/yyyy hh:mm a", Locale.US)));6364 // Literal text in pattern65 System.out.println("\nLiteral text:");66 System.out.println("'Date:' yyyy-MM-dd: " + dt.format(DateTimeFormatter.ofPattern("'Date:' yyyy-MM-dd")));67 System.out.println("'at' HH:mm: " + dt.format(DateTimeFormatter.ofPattern("'at' HH:mm")));6869 // Reusable formatter70 DateTimeFormatter customFormatter→ Text(DayOfWeek)','' 'Text(MonthOfYear,SHORT)' 'Value(DayOfMonth,2)','' 'Value(YearOfEra,4,19,EXCEEDS_PAD)' ''at'' 'Value(ClockHourOfAmPm,2)':'Value(MinuteOfHour,2)' 'Text(AmPmOfDay,SHORT) = DateTimeFormatter.ofPattern("EEEE, MMM dd, yyyy 'at' hh:mm a", Locale.US);71 System.out.println("\nCustom formatter:");72 System.out.println(dt.format(customFormatterText(DayOfWeek)','' 'Text(MonthOfYear,SHORT)' 'Value(DayOfMonth,2)','' 'Value(YearOfEra,4,19,EXCEEDS_PAD)' ''at'' 'Value(ClockHourOfAmPm,2)':'Value(MinuteOfHour,2)' 'Text(AmPmOfDay,SHORT)));7374 // Different locales75 System.out.println("\nLocale patterns:");76 DateTimeFormatter usFormat→ Text(MonthOfYear,SHORT)' 'Value(DayOfMonth,2)','' 'Value(YearOfEra,4,19,EXCEEDS_PAD) = DateTimeFormatter.ofPattern("MMM dd, yyyy", Locale.US);77 DateTimeFormatter frFormat→ Value(DayOfMonth,2)' 'Text(MonthOfYear,SHORT)' 'Value(YearOfEra,4,19,EXCEEDS_PAD) = DateTimeFormatter.ofPattern("dd MMM yyyy", Locale.FRENCH);78 System.out.println("US: " + dt.format(usFormatText(MonthOfYear,SHORT)' 'Value(DayOfMonth,2)','' 'Value(YearOfEra,4,19,EXCEEDS_PAD)));79 System.out.println("French: " + dt.format(frFormatValue(DayOfMonth,2)' 'Text(MonthOfYear,SHORT)' 'Value(YearOfEra,4,19,EXCEEDS_PAD)));80}outputDateTime: 2025-01-29T14:30:45 Year patterns: yyyy: 2025 yy: 25 Month patterns: MM: 01 M: 1 MMM: Jan MMMM: January Day patterns: dd: 29 d: 29 DDD: 029 Day of week: E: Wed EEEE: Wednesday Hour patterns: HH: 14 H: 14 hh: 02 h: 2 AM/PM: a: PM hh:mm a: 02:30 PM Minute and second: mm: 30 ss: 45 Combined patterns: yyyy-MM-dd: 2025-01-29 dd/MM/yyyy: 29/01/2025 MMM dd, yyyy: Jan 29, 2025 EEEE, MMMM dd, yyyy: Wednesday, January 29, 2025 yyyy-MM-dd HH:mm:ss: 2025-01-29 14:30:45 dd/MM/yyyy hh:mm a: 29/01/2025 02:30 PM Literal text: 'Date:' yyyy-MM-dd: Date: 2025-01-29 'at' HH:mm: at 14:30 Custom formatter: Wednesday, Jan 29, 2025 at 02:30 PM Locale patterns: US: Jan 29, 2025 French: 29 janv. 2025
dt ← 2024-07-04T09:05, customFormatter ← Text(DayOfWeek)','' 'Text(MonthOfYear,SHORT)' 'Value(DayOfMonth,2)','' 'Value(YearOfEra,4,19,EXCEEDS_PAD)' ''at'' 'Value(ClockHourOfAmPm,2)':'Value(MinuteOfHour,2)' 'Text(AmPmOfDay,SHORT)
9public static void main(String[] args) {10 LocalDateTime dt→ 2024-07-04T09:05 = LocalDateTime.of(2024, 7, 4, 9, 5, 0);11 12 System.out.println("DateTime: " + dt2024-07-04T09:05);13 System.out.println();1415 // Year patterns16 System.out.println("Year patterns:");17 System.out.println("yyyy: " + dt.format(DateTimeFormatter.ofPattern("yyyy")));18 System.out.println("yy: " + dt.format(DateTimeFormatter.ofPattern("yy")));1920 // Month patterns21 System.out.println("\nMonth patterns:");22 System.out.println("MM: " + dt.format(DateTimeFormatter.ofPattern("MM")));23 System.out.println("M: " + dt.format(DateTimeFormatter.ofPattern("M")));24 System.out.println("MMM: " + dt.format(DateTimeFormatter.ofPattern("MMM", Locale.US)));25 System.out.println("MMMM: " + dt.format(DateTimeFormatter.ofPattern("MMMM", Locale.US)));2627 // Day patterns28 System.out.println("\nDay patterns:");29 System.out.println("dd: " + dt.format(DateTimeFormatter.ofPattern("dd")));30 System.out.println("d: " + dt.format(DateTimeFormatter.ofPattern("d")));31 System.out.println("DDD: " + dt.format(DateTimeFormatter.ofPattern("DDD"))); // day of year3233 // Day of week34 System.out.println("\nDay of week:");35 System.out.println("E: " + dt.format(DateTimeFormatter.ofPattern("E", Locale.US)));36 System.out.println("EEEE: " + dt.format(DateTimeFormatter.ofPattern("EEEE", Locale.US)));3738 // Hour patterns39 System.out.println("\nHour patterns:");40 System.out.println("HH: " + dt.format(DateTimeFormatter.ofPattern("HH"))); // 24-hour41 System.out.println("H: " + dt.format(DateTimeFormatter.ofPattern("H")));42 System.out.println("hh: " + dt.format(DateTimeFormatter.ofPattern("hh"))); // 12-hour43 System.out.println("h: " + dt.format(DateTimeFormatter.ofPattern("h")));4445 // AM/PM46 System.out.println("\nAM/PM:");47 System.out.println("a: " + dt.format(DateTimeFormatter.ofPattern("a", Locale.US)));48 System.out.println("hh:mm a: " + dt.format(DateTimeFormatter.ofPattern("hh:mm a", Locale.US)));4950 // Minute and second51 System.out.println("\nMinute and second:");52 System.out.println("mm: " + dt.format(DateTimeFormatter.ofPattern("mm")));53 System.out.println("ss: " + dt.format(DateTimeFormatter.ofPattern("ss")));5455 // Combined patterns56 System.out.println("\nCombined patterns:");57 System.out.println("yyyy-MM-dd: " + dt.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));58 System.out.println("dd/MM/yyyy: " + dt.format(DateTimeFormatter.ofPattern("dd/MM/yyyy")));59 System.out.println("MMM dd, yyyy: " + dt.format(DateTimeFormatter.ofPattern("MMM dd, yyyy", Locale.US)));60 System.out.println("EEEE, MMMM dd, yyyy: " + dt.format(DateTimeFormatter.ofPattern("EEEE, MMMM dd, yyyy", Locale.US)));61 System.out.println("yyyy-MM-dd HH:mm:ss: " + dt.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));62 System.out.println("dd/MM/yyyy hh:mm a: " + dt.format(DateTimeFormatter.ofPattern("dd/MM/yyyy hh:mm a", Locale.US)));6364 // Literal text in pattern65 System.out.println("\nLiteral text:");66 System.out.println("'Date:' yyyy-MM-dd: " + dt.format(DateTimeFormatter.ofPattern("'Date:' yyyy-MM-dd")));67 System.out.println("'at' HH:mm: " + dt.format(DateTimeFormatter.ofPattern("'at' HH:mm")));6869 // Reusable formatter70 DateTimeFormatter customFormatter→ Text(DayOfWeek)','' 'Text(MonthOfYear,SHORT)' 'Value(DayOfMonth,2)','' 'Value(YearOfEra,4,19,EXCEEDS_PAD)' ''at'' 'Value(ClockHourOfAmPm,2)':'Value(MinuteOfHour,2)' 'Text(AmPmOfDay,SHORT) = DateTimeFormatter.ofPattern("EEEE, MMM dd, yyyy 'at' hh:mm a", Locale.US);71 System.out.println("\nCustom formatter:");72 System.out.println(dt.format(customFormatterText(DayOfWeek)','' 'Text(MonthOfYear,SHORT)' 'Value(DayOfMonth,2)','' 'Value(YearOfEra,4,19,EXCEEDS_PAD)' ''at'' 'Value(ClockHourOfAmPm,2)':'Value(MinuteOfHour,2)' 'Text(AmPmOfDay,SHORT)));7374 // Different locales75 System.out.println("\nLocale patterns:");76 DateTimeFormatter usFormat→ Text(MonthOfYear,SHORT)' 'Value(DayOfMonth,2)','' 'Value(YearOfEra,4,19,EXCEEDS_PAD) = DateTimeFormatter.ofPattern("MMM dd, yyyy", Locale.US);77 DateTimeFormatter frFormat→ Value(DayOfMonth,2)' 'Text(MonthOfYear,SHORT)' 'Value(YearOfEra,4,19,EXCEEDS_PAD) = DateTimeFormatter.ofPattern("dd MMM yyyy", Locale.FRENCH);78 System.out.println("US: " + dt.format(usFormatText(MonthOfYear,SHORT)' 'Value(DayOfMonth,2)','' 'Value(YearOfEra,4,19,EXCEEDS_PAD)));79 System.out.println("French: " + dt.format(frFormatValue(DayOfMonth,2)' 'Text(MonthOfYear,SHORT)' 'Value(YearOfEra,4,19,EXCEEDS_PAD)));80}outputDateTime: 2024-07-04T09:05 Year patterns: yyyy: 2024 yy: 24 Month patterns: MM: 07 M: 7 MMM: Jul MMMM: July Day patterns: dd: 04 d: 4 DDD: 186 Day of week: E: Thu EEEE: Thursday Hour patterns: HH: 09 H: 9 hh: 09 h: 9 AM/PM: a: AM hh:mm a: 09:05 AM Minute and second: mm: 05 ss: 00 Combined patterns: yyyy-MM-dd: 2024-07-04 dd/MM/yyyy: 04/07/2024 MMM dd, yyyy: Jul 04, 2024 EEEE, MMMM dd, yyyy: Thursday, July 04, 2024 yyyy-MM-dd HH:mm:ss: 2024-07-04 09:05:00 dd/MM/yyyy hh:mm a: 04/07/2024 09:05 AM Literal text: 'Date:' yyyy-MM-dd: Date: 2024-07-04 'at' HH:mm: at 09:05 Custom formatter: Thursday, Jul 04, 2024 at 09:05 AM Locale patterns: US: Jul 04, 2024 French: 04 juil. 2024
format_pattern
A string of letters representing date/time fields like `yyyy` for year, `MM` for month, `dd` for day.
Formatting Output
Format.java
Replay: real traced execution (multi-file project)
// Format to string
import java.time.LocalDateTime;
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class Format {
public static void main(String[] args) {
LocalDateTime dt = LocalDateTime.of(2025, 1, 29, 14, 30, 45);
System.out.println("DateTime: " + dt);
System.out.println();
// ISO formatters
System.out.println("ISO formats:");
System.out.println("ISO_LOCAL_DATE_TIME: " + dt.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME));
System.out.println("ISO_LOCAL_DATE: " + dt.format(DateTimeFormatter.ISO_LOCAL_DATE));
System.out.println("ISO_LOCAL_TIME: " + dt.format(DateTimeFormatter.ISO_LOCAL_TIME));
// Custom patterns
System.out.println("\nCustom patterns:");
DateTimeFormatter fmt1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
System.out.println("yyyy-MM-dd HH:mm:ss: " + dt.format(fmt1));
DateTimeFormatter fmt2 = DateTimeFormatter.ofPattern("MM/dd/yyyy");
System.out.println("MM/dd/yyyy: " + dt.format(fmt2));
DateTimeFormatter fmt3 = DateTimeFormatter.ofPattern("dd-MMM-yyyy", Locale.US);
System.out.println("dd-MMM-yyyy: " + dt.format(fmt3));
DateTimeFormatter fmt4 = DateTimeFormatter.ofPattern("EEEE, MMMM dd, yyyy", Locale.US);
System.out.println("Full date: " + dt.format(fmt4));
// Time formats
System.out.println("\nTime formats:");
DateTimeFormatter fmt5 = DateTimeFormatter.ofPattern("HH:mm:ss");
System.out.println("24-hour: " + dt.format(fmt5));
DateTimeFormatter fmt6 = DateTimeFormatter.ofPattern("hh:mm a", Locale.US);
System.out.println("12-hour: " + dt.format(fmt6));
// Date only
LocalDate date = LocalDate.of(2025, 1, 29);
System.out.println("\nDate only:");
System.out.println("ISO: " + date.format(DateTimeFormatter.ISO_LOCAL_DATE));
System.out.println("US: " + date.format(DateTimeFormatter.ofPattern("MM/dd/yyyy")));
System.out.println("EU: " + date.format(DateTimeFormatter.ofPattern("dd/MM/yyyy")));
// Time only
LocalTime time = LocalTime.of(14, 30, 45);
System.out.println("\nTime only:");
System.out.println("ISO: " + time.format(DateTimeFormatter.ISO_LOCAL_TIME));
System.out.println("Simple: " + time.format(DateTimeFormatter.ofPattern("HH:mm")));
// toString() for default format
System.out.println("\nDefault toString():");
System.out.println("Date: " + date);
System.out.println("Time: " + time);
System.out.println("DateTime: " + dt);
}
}
// Format to string
import java.time.LocalDateTime;
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class Format {
public static void main(String[] args) {
LocalDateTime dt = LocalDateTime.of(2024, 12, 5, 9, 15, 0);
System.out.println("DateTime: " + dt);
System.out.println();
// ISO formatters
System.out.println("ISO formats:");
System.out.println("ISO_LOCAL_DATE_TIME: " + dt.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME));
System.out.println("ISO_LOCAL_DATE: " + dt.format(DateTimeFormatter.ISO_LOCAL_DATE));
System.out.println("ISO_LOCAL_TIME: " + dt.format(DateTimeFormatter.ISO_LOCAL_TIME));
// Custom patterns
System.out.println("\nCustom patterns:");
DateTimeFormatter fmt1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
System.out.println("yyyy-MM-dd HH:mm:ss: " + dt.format(fmt1));
DateTimeFormatter fmt2 = DateTimeFormatter.ofPattern("MM/dd/yyyy");
System.out.println("MM/dd/yyyy: " + dt.format(fmt2));
DateTimeFormatter fmt3 = DateTimeFormatter.ofPattern("dd-MMM-yyyy", Locale.US);
System.out.println("dd-MMM-yyyy: " + dt.format(fmt3));
DateTimeFormatter fmt4 = DateTimeFormatter.ofPattern("EEEE, MMMM dd, yyyy", Locale.US);
System.out.println("Full date: " + dt.format(fmt4));
// Time formats
System.out.println("\nTime formats:");
DateTimeFormatter fmt5 = DateTimeFormatter.ofPattern("HH:mm:ss");
System.out.println("24-hour: " + dt.format(fmt5));
DateTimeFormatter fmt6 = DateTimeFormatter.ofPattern("hh:mm a", Locale.US);
System.out.println("12-hour: " + dt.format(fmt6));
// Date only
LocalDate date = LocalDate.of(2025, 1, 29);
System.out.println("\nDate only:");
System.out.println("ISO: " + date.format(DateTimeFormatter.ISO_LOCAL_DATE));
System.out.println("US: " + date.format(DateTimeFormatter.ofPattern("MM/dd/yyyy")));
System.out.println("EU: " + date.format(DateTimeFormatter.ofPattern("dd/MM/yyyy")));
// Time only
LocalTime time = LocalTime.of(14, 30, 45);
System.out.println("\nTime only:");
System.out.println("ISO: " + time.format(DateTimeFormatter.ISO_LOCAL_TIME));
System.out.println("Simple: " + time.format(DateTimeFormatter.ofPattern("HH:mm")));
// toString() for default format
System.out.println("\nDefault toString():");
System.out.println("Date: " + date);
System.out.println("Time: " + time);
System.out.println("DateTime: " + dt);
}
}
dt ← 2025-01-29T14:30:45, fmt1 ← Value(YearOfEra,4,19,EXCEEDS_PAD)'-'Value(MonthOfYear,2)'-'Value(DayOfMonth,2)' 'Value(HourOfDay,2)':'Value(MinuteOfHour,2)':'Value(SecondOfMinute,2)
11public static void main(String[] args) {12 LocalDateTime dt→ 2025-01-29T14:30:45 = LocalDateTime.of(2025, 1, 29, 14, 30, 45); //@dt=LocalDateTime.of(2025, 1, 29, 14, 30, 45), LocalDateTime.of(2024, 12, 5, 9, 15, 0)13 14 System.out.println("DateTime: " + dt2025-01-29T14:30:45);15 System.out.println();1617 // ISO formatters18 System.out.println("ISO formats:");19 System.out.println("ISO_LOCAL_DATE_TIME: " + dt.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME));20 System.out.println("ISO_LOCAL_DATE: " + dt.format(DateTimeFormatter.ISO_LOCAL_DATE));21 System.out.println("ISO_LOCAL_TIME: " + dt.format(DateTimeFormatter.ISO_LOCAL_TIME));2223 // Custom patterns24 System.out.println("\nCustom patterns:");25 26 DateTimeFormatter fmt1→ Value(YearOfEra,4,19,EXCEEDS_PAD)'-'Value(MonthOfYear,2)'-'Value(DayOfMonth,2)' 'Value(HourOfDay,2)':'Value(MinuteOfHour,2)':'Value(SecondOfMinute,2) = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");27 System.out.println("yyyy-MM-dd HH:mm:ss: " + dt.format(fmt1Value(YearOfEra,4,19,EXCEEDS_PAD)'-'Value(MonthOfYear,2)'-'Value(DayOfMonth,2)' 'Value(HourOfDay,2)':'Value(MinuteOfHour,2)':'Value(SecondOfMinute,2)));28 29 DateTimeFormatter fmt2→ Value(MonthOfYear,2)'/'Value(DayOfMonth,2)'/'Value(YearOfEra,4,19,EXCEEDS_PAD) = DateTimeFormatter.ofPattern("MM/dd/yyyy");30 System.out.println("MM/dd/yyyy: " + dt.format(fmt2Value(MonthOfYear,2)'/'Value(DayOfMonth,2)'/'Value(YearOfEra,4,19,EXCEEDS_PAD)));31 32 DateTimeFormatter fmt3→ Value(DayOfMonth,2)'-'Text(MonthOfYear,SHORT)'-'Value(YearOfEra,4,19,EXCEEDS_PAD) = DateTimeFormatter.ofPattern("dd-MMM-yyyy", Locale.US);33 System.out.println("dd-MMM-yyyy: " + dt.format(fmt3Value(DayOfMonth,2)'-'Text(MonthOfYear,SHORT)'-'Value(YearOfEra,4,19,EXCEEDS_PAD)));34 35 DateTimeFormatter fmt4→ Text(DayOfWeek)','' 'Text(MonthOfYear)' 'Value(DayOfMonth,2)','' 'Value(YearOfEra,4,19,EXCEEDS_PAD) = DateTimeFormatter.ofPattern("EEEE, MMMM dd, yyyy", Locale.US);36 System.out.println("Full date: " + dt.format(fmt4Text(DayOfWeek)','' 'Text(MonthOfYear)' 'Value(DayOfMonth,2)','' 'Value(YearOfEra,4,19,EXCEEDS_PAD)));3738 // Time formats39 System.out.println("\nTime formats:");40 41 DateTimeFormatter fmt5→ Value(HourOfDay,2)':'Value(MinuteOfHour,2)':'Value(SecondOfMinute,2) = DateTimeFormatter.ofPattern("HH:mm:ss");42 System.out.println("24-hour: " + dt.format(fmt5Value(HourOfDay,2)':'Value(MinuteOfHour,2)':'Value(SecondOfMinute,2)));43 44 DateTimeFormatter fmt6→ Value(ClockHourOfAmPm,2)':'Value(MinuteOfHour,2)' 'Text(AmPmOfDay,SHORT) = DateTimeFormatter.ofPattern("hh:mm a", Locale.US);45 System.out.println("12-hour: " + dt.format(fmt6Value(ClockHourOfAmPm,2)':'Value(MinuteOfHour,2)' 'Text(AmPmOfDay,SHORT)));4647 // Date only48 LocalDate date→ 2025-01-29 = LocalDate.of(2025, 1, 29);49 System.out.println("\nDate only:");50 System.out.println("ISO: " + date.format(DateTimeFormatter.ISO_LOCAL_DATE));51 System.out.println("US: " + date.format(DateTimeFormatter.ofPattern("MM/dd/yyyy")));52 System.out.println("EU: " + date.format(DateTimeFormatter.ofPattern("dd/MM/yyyy")));5354 // Time only55 LocalTime time→ 14:30:45 = LocalTime.of(14, 30, 45);56 System.out.println("\nTime only:");57 System.out.println("ISO: " + time.format(DateTimeFormatter.ISO_LOCAL_TIME));58 System.out.println("Simple: " + time.format(DateTimeFormatter.ofPattern("HH:mm")));5960 // toString() for default format61 System.out.println("\nDefault toString():");62 System.out.println("Date: " + date2025-01-29);63 System.out.println("Time: " + time14:30:45);64 System.out.println("DateTime: " + dt2025-01-29T14:30:45);65}outputDateTime: 2025-01-29T14:30:45 ISO formats: ISO_LOCAL_DATE_TIME: 2025-01-29T14:30:45 ISO_LOCAL_DATE: 2025-01-29 ISO_LOCAL_TIME: 14:30:45 Custom patterns: yyyy-MM-dd HH:mm:ss: 2025-01-29 14:30:45 MM/dd/yyyy: 01/29/2025 dd-MMM-yyyy: 29-Jan-2025 Full date: Wednesday, January 29, 2025 Time formats: 24-hour: 14:30:45 12-hour: 02:30 PM Date only: ISO: 2025-01-29 US: 01/29/2025 EU: 29/01/2025 Time only: ISO: 14:30:45 Simple: 14:30 Default toString(): Date: 2025-01-29 Time: 14:30:45 DateTime: 2025-01-29T14:30:45
dt ← 2024-12-05T09:15, fmt1 ← Value(YearOfEra,4,19,EXCEEDS_PAD)'-'Value(MonthOfYear,2)'-'Value(DayOfMonth,2)' 'Value(HourOfDay,2)':'Value(MinuteOfHour,2)':'Value(SecondOfMinute,2)
11public static void main(String[] args) {12 LocalDateTime dt→ 2024-12-05T09:15 = LocalDateTime.of(2024, 12, 5, 9, 15, 0);13 14 System.out.println("DateTime: " + dt2024-12-05T09:15);15 System.out.println();1617 // ISO formatters18 System.out.println("ISO formats:");19 System.out.println("ISO_LOCAL_DATE_TIME: " + dt.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME));20 System.out.println("ISO_LOCAL_DATE: " + dt.format(DateTimeFormatter.ISO_LOCAL_DATE));21 System.out.println("ISO_LOCAL_TIME: " + dt.format(DateTimeFormatter.ISO_LOCAL_TIME));2223 // Custom patterns24 System.out.println("\nCustom patterns:");25 26 DateTimeFormatter fmt1→ Value(YearOfEra,4,19,EXCEEDS_PAD)'-'Value(MonthOfYear,2)'-'Value(DayOfMonth,2)' 'Value(HourOfDay,2)':'Value(MinuteOfHour,2)':'Value(SecondOfMinute,2) = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");27 System.out.println("yyyy-MM-dd HH:mm:ss: " + dt.format(fmt1Value(YearOfEra,4,19,EXCEEDS_PAD)'-'Value(MonthOfYear,2)'-'Value(DayOfMonth,2)' 'Value(HourOfDay,2)':'Value(MinuteOfHour,2)':'Value(SecondOfMinute,2)));28 29 DateTimeFormatter fmt2→ Value(MonthOfYear,2)'/'Value(DayOfMonth,2)'/'Value(YearOfEra,4,19,EXCEEDS_PAD) = DateTimeFormatter.ofPattern("MM/dd/yyyy");30 System.out.println("MM/dd/yyyy: " + dt.format(fmt2Value(MonthOfYear,2)'/'Value(DayOfMonth,2)'/'Value(YearOfEra,4,19,EXCEEDS_PAD)));31 32 DateTimeFormatter fmt3→ Value(DayOfMonth,2)'-'Text(MonthOfYear,SHORT)'-'Value(YearOfEra,4,19,EXCEEDS_PAD) = DateTimeFormatter.ofPattern("dd-MMM-yyyy", Locale.US);33 System.out.println("dd-MMM-yyyy: " + dt.format(fmt3Value(DayOfMonth,2)'-'Text(MonthOfYear,SHORT)'-'Value(YearOfEra,4,19,EXCEEDS_PAD)));34 35 DateTimeFormatter fmt4→ Text(DayOfWeek)','' 'Text(MonthOfYear)' 'Value(DayOfMonth,2)','' 'Value(YearOfEra,4,19,EXCEEDS_PAD) = DateTimeFormatter.ofPattern("EEEE, MMMM dd, yyyy", Locale.US);36 System.out.println("Full date: " + dt.format(fmt4Text(DayOfWeek)','' 'Text(MonthOfYear)' 'Value(DayOfMonth,2)','' 'Value(YearOfEra,4,19,EXCEEDS_PAD)));3738 // Time formats39 System.out.println("\nTime formats:");40 41 DateTimeFormatter fmt5→ Value(HourOfDay,2)':'Value(MinuteOfHour,2)':'Value(SecondOfMinute,2) = DateTimeFormatter.ofPattern("HH:mm:ss");42 System.out.println("24-hour: " + dt.format(fmt5Value(HourOfDay,2)':'Value(MinuteOfHour,2)':'Value(SecondOfMinute,2)));43 44 DateTimeFormatter fmt6→ Value(ClockHourOfAmPm,2)':'Value(MinuteOfHour,2)' 'Text(AmPmOfDay,SHORT) = DateTimeFormatter.ofPattern("hh:mm a", Locale.US);45 System.out.println("12-hour: " + dt.format(fmt6Value(ClockHourOfAmPm,2)':'Value(MinuteOfHour,2)' 'Text(AmPmOfDay,SHORT)));4647 // Date only48 LocalDate date→ 2025-01-29 = LocalDate.of(2025, 1, 29);49 System.out.println("\nDate only:");50 System.out.println("ISO: " + date.format(DateTimeFormatter.ISO_LOCAL_DATE));51 System.out.println("US: " + date.format(DateTimeFormatter.ofPattern("MM/dd/yyyy")));52 System.out.println("EU: " + date.format(DateTimeFormatter.ofPattern("dd/MM/yyyy")));5354 // Time only55 LocalTime time→ 14:30:45 = LocalTime.of(14, 30, 45);56 System.out.println("\nTime only:");57 System.out.println("ISO: " + time.format(DateTimeFormatter.ISO_LOCAL_TIME));58 System.out.println("Simple: " + time.format(DateTimeFormatter.ofPattern("HH:mm")));5960 // toString() for default format61 System.out.println("\nDefault toString():");62 System.out.println("Date: " + date2025-01-29);63 System.out.println("Time: " + time14:30:45);64 System.out.println("DateTime: " + dt2024-12-05T09:15);65}outputDateTime: 2024-12-05T09:15 ISO formats: ISO_LOCAL_DATE_TIME: 2024-12-05T09:15:00 ISO_LOCAL_DATE: 2024-12-05 ISO_LOCAL_TIME: 09:15:00 Custom patterns: yyyy-MM-dd HH:mm:ss: 2024-12-05 09:15:00 MM/dd/yyyy: 12/05/2024 dd-MMM-yyyy: 05-Dec-2024 Full date: Thursday, December 05, 2024 Time formats: 24-hour: 09:15:00 12-hour: 09:15 AM Date only: ISO: 2025-01-29 US: 01/29/2025 EU: 29/01/2025 Time only: ISO: 14:30:45 Simple: 14:30 Default toString(): Date: 2025-01-29 Time: 14:30:45 DateTime: 2024-12-05T09:15
Parsing Input
Parse.java
Replay: real traced execution (multi-file project)
// Parse from string
import java.time.LocalDateTime;
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import java.util.Locale;
public class Parse {
public static void main(String[] args) {
// Parse ISO format
String iso = "2025-01-29T14:30:45";
LocalDateTime dt1 = LocalDateTime.parse(iso);
System.out.println("Parsed ISO: " + dt1);
// Parse with custom pattern
String custom1 = "29/01/2025 14:30";
DateTimeFormatter fmt1 = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm");
LocalDateTime dt2 = LocalDateTime.parse(custom1, fmt1);
System.out.println("Parsed " + custom1 + ": " + dt2);
// Parse various formats
System.out.println("\nParse various formats:");
String[] dateTimeStrings = {
"2025-01-29 14:30:45",
"01/29/2025 02:30 PM",
"29-Jan-2025 14:30"
};
DateTimeFormatter[] formatters = {
DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"),
DateTimeFormatter.ofPattern("MM/dd/yyyy hh:mm a", Locale.US),
DateTimeFormatter.ofPattern("dd-MMM-yyyy HH:mm", Locale.US)
};
for (int i = 0; i < dateTimeStrings.length; i++) {
LocalDateTime dt = LocalDateTime.parse(dateTimeStrings[i], formatters[i]);
System.out.println(dateTimeStrings[i] + " -> " + dt);
}
// Parse dates
System.out.println("\nParse dates:");
LocalDate date1 = LocalDate.parse("2025-01-29");
System.out.println("ISO date: " + date1);
LocalDate date2 = LocalDate.parse("01/29/2025", DateTimeFormatter.ofPattern("MM/dd/yyyy"));
System.out.println("US date: " + date2);
// Parse times
System.out.println("\nParse times:");
LocalTime time1 = LocalTime.parse("14:30:45");
System.out.println("ISO time: " + time1);
LocalTime time2 = LocalTime.parse("02:30 PM", DateTimeFormatter.ofPattern("hh:mm a", Locale.US));
System.out.println("12-hour time: " + time2);
// Handle parse errors
System.out.println("\nHandle parse errors:");
String[] testStrings = {
"2025-01-29T14:30:45",
"2025-13-01T14:30:45", // invalid month
"not-a-datetime"
};
for (String str : testStrings) {
try {
LocalDateTime dt = LocalDateTime.parse(str);
System.out.println(str + " -> " + dt);
} catch (DateTimeParseException e) {
System.out.println(str + " -> ERROR: Invalid format");
}
}
// Safe parse helper
System.out.println("\nSafe parse:");
System.out.println(safeParseDateTime("2025-01-29T14:30:45"));
System.out.println(safeParseDateTime("invalid"));
}
public static LocalDateTime safeParseDateTime(String str) {
try {
return LocalDateTime.parse(str);
} catch (DateTimeParseException e) {
System.out.println("Invalid datetime: " + str);
return null;
}
}
}
// Parse from string
import java.time.LocalDateTime;
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import java.util.Locale;
public class Parse {
public static void main(String[] args) {
// Parse ISO format
String iso = "2024-12-05T09:15:00";
LocalDateTime dt1 = LocalDateTime.parse(iso);
System.out.println("Parsed ISO: " + dt1);
// Parse with custom pattern
String custom1 = "29/01/2025 14:30";
DateTimeFormatter fmt1 = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm");
LocalDateTime dt2 = LocalDateTime.parse(custom1, fmt1);
System.out.println("Parsed " + custom1 + ": " + dt2);
// Parse various formats
System.out.println("\nParse various formats:");
String[] dateTimeStrings = {
"2025-01-29 14:30:45",
"01/29/2025 02:30 PM",
"29-Jan-2025 14:30"
};
DateTimeFormatter[] formatters = {
DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"),
DateTimeFormatter.ofPattern("MM/dd/yyyy hh:mm a", Locale.US),
DateTimeFormatter.ofPattern("dd-MMM-yyyy HH:mm", Locale.US)
};
for (int i = 0; i < dateTimeStrings.length; i++) {
LocalDateTime dt = LocalDateTime.parse(dateTimeStrings[i], formatters[i]);
System.out.println(dateTimeStrings[i] + " -> " + dt);
}
// Parse dates
System.out.println("\nParse dates:");
LocalDate date1 = LocalDate.parse("2025-01-29");
System.out.println("ISO date: " + date1);
LocalDate date2 = LocalDate.parse("01/29/2025", DateTimeFormatter.ofPattern("MM/dd/yyyy"));
System.out.println("US date: " + date2);
// Parse times
System.out.println("\nParse times:");
LocalTime time1 = LocalTime.parse("14:30:45");
System.out.println("ISO time: " + time1);
LocalTime time2 = LocalTime.parse("02:30 PM", DateTimeFormatter.ofPattern("hh:mm a", Locale.US));
System.out.println("12-hour time: " + time2);
// Handle parse errors
System.out.println("\nHandle parse errors:");
String[] testStrings = {
"2025-01-29T14:30:45",
"2025-13-01T14:30:45", // invalid month
"not-a-datetime"
};
for (String str : testStrings) {
try {
LocalDateTime dt = LocalDateTime.parse(str);
System.out.println(str + " -> " + dt);
} catch (DateTimeParseException e) {
System.out.println(str + " -> ERROR: Invalid format");
}
}
// Safe parse helper
System.out.println("\nSafe parse:");
System.out.println(safeParseDateTime("2025-01-29T14:30:45"));
System.out.println(safeParseDateTime("invalid"));
}
public static LocalDateTime safeParseDateTime(String str) {
try {
return LocalDateTime.parse(str);
} catch (DateTimeParseException e) {
System.out.println("Invalid datetime: " + str);
return null;
}
}
}
iso ← 2025-01-29T14:30:45, dt1 ← 2025-01-29T14:30:45, custom1 ← 29/01/2025 14:30
12public static void main(String[] args) {13 // Parse ISO format14 String iso→ 2025-01-29T14:30:45 = "2025-01-29T14:30:45"; //@iso="2025-01-29T14:30:45", "2024-12-05T09:15:00"15 LocalDateTime dt1→ 2025-01-29T14:30:45 = LocalDateTime.parse(iso2025-01-29T14:30:45);16 System.out.println("Parsed ISO: " + dt12025-01-29T14:30:45);1718 // Parse with custom pattern19 String custom1→ 29/01/2025 14:30 = "29/01/2025 14:30";20 DateTimeFormatter fmt1→ Value(DayOfMonth,2)'/'Value(MonthOfYear,2)'/'Value(YearOfEra,4,19,EXCEEDS_PAD)' 'Value(HourOfDay,2)':'Value(MinuteOfHour,2) = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm");21 LocalDateTime dt2→ 2025-01-29T14:30 = LocalDateTime.parse(custom129/01/2025 14:30, fmt1Value(DayOfMonth,2)'/'Value(MonthOfYear,2)'/'Value(YearOfEra,4,19,EXCEEDS_PAD)' 'Value(HourOfDay,2)':'Value(MinuteOfHour,2));22 System.out.println("Parsed " + custom129/01/2025 14:30 + ": " + dt22025-01-29T14:30);2324 // Parse various formats25 System.out.println("\nParse various formats:");26 27 String[] dateTimeStrings = {28 "2025-01-29 14:30:45",29 "01/29/2025 02:30 PM",30 "29-Jan-2025 14:30"31 };32 33 DateTimeFormatter[] formatters = {34 DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"),35 DateTimeFormatter.ofPattern("MM/dd/yyyy hh:mm a", Locale.US),36 DateTimeFormatter.ofPattern("dd-MMM-yyyy HH:mm", Locale.US)37 };outputParsed ISO: 2025-01-29T14:30:45 Parsed 29/01/2025 14:30: 2025-01-29T14:30 Parse various formats:dt ← 2025-01-29T14:30:45
pass 1 of 339for (int i0 = 0; i < dateTimeStrings.length3; i++) {40 LocalDateTime dt→ 2025-01-29T14:30:45 = LocalDateTime.parse(dateTimeStrings[i]2025-01-29 14:30:45, formatters[i]Value(YearOfEra,4,19,EXCEEDS_PAD)'-'Value(MonthOfYear,2)'-'Value(DayOfMonth,2)' 'Value(HourOfDay,2)':'Value(MinuteOfHour,2)':'Value(SecondOfMinute,2));41 System.out.println(dateTimeStrings[i]2025-01-29 14:30:45 + " -> " + dt2025-01-29T14:30:45);42}output2025-01-29 14:30:45 -> 2025-01-29T14:30:45All 3 passes — pass 1 is the card above pass idateTimeStrings[i]formatters[i]dt1 0 2025-01-29 14:30:45 Value(YearOfEra,4,19,EXCEEDS_PAD)'-'Value(MonthOfYear,2)'-'Value(DayOfMonth,2)' 'Value(HourOfDay,2)':'Value(MinuteOfHour,2)':'Value(SecondOfMinute,2) 2025-01-29T14:30:45 2 1 01/29/2025 02:30 PM Value(MonthOfYear,2)'/'Value(DayOfMonth,2)'/'Value(YearOfEra,4,19,EXCEEDS_PAD)' 'Value(ClockHourOfAmPm,2)':'Value(MinuteOfHour,2)' 'Text(AmPmOfDay,SHORT) 2025-01-29T14:30 3 2 29-Jan-2025 14:30 Value(DayOfMonth,2)'-'Text(MonthOfYear,SHORT)'-'Value(YearOfEra,4,19,EXCEEDS_PAD)' 'Value(HourOfDay,2)':'Value(MinuteOfHour,2) 2025-01-29T14:30 date1 ← 2025-01-29, date2 ← 2025-01-29, time1 ← 14:30:45, time2 ← 14:30
44// Parse dates45System.out.println("\nParse dates:");46LocalDate date1→ 2025-01-29 = LocalDate.parse("2025-01-29");47System.out.println("ISO date: " + date12025-01-29);4849LocalDate date2→ 2025-01-29 = LocalDate.parse("01/29/2025", DateTimeFormatter.ofPattern("MM/dd/yyyy"));50System.out.println("US date: " + date22025-01-29);5152// Parse times53System.out.println("\nParse times:");54LocalTime time1→ 14:30:45 = LocalTime.parse("14:30:45");55System.out.println("ISO time: " + time114:30:45);5657LocalTime time2→ 14:30 = LocalTime.parse("02:30 PM", DateTimeFormatter.ofPattern("hh:mm a", Locale.US));58System.out.println("12-hour time: " + time214:30);5960// Handle parse errors61System.out.println("\nHandle parse errors:");62String[] testStrings = {63 "2025-01-29T14:30:45",64 "2025-13-01T14:30:45", // invalid month65 "not-a-datetime"66};output Parse dates: ISO date: 2025-01-29 US date: 2025-01-29 Parse times: ISO time: 14:30:45 12-hour time: 14:30 Handle parse errors:for (String str : testStrings)
pass 1 of 368for (String str2025-01-29T14:30:45 : testStrings) {69 try {All 3 passes — pass 1 is the card above pass stre1 2025-01-29T14:30:45 — 2 2025-13-01T14:30:45 java.time.format.DateTimeParseException: Text '2025-13-01T14:30:45' could not be parsed: Invalid value for MonthOfYear (valid values 1 - 12): 13 3 not-a-datetime java.time.format.DateTimeParseException: Text 'not-a-datetime' could not be parsed at index 0 dt ← 2025-01-29T14:30:45
pass 1 of 368for (String str : testStrings) {69 try {70 LocalDateTime dt→ 2025-01-29T14:30:45 = LocalDateTime.parse(str2025-01-29T14:30:45);71 System.out.println(str2025-01-29T14:30:45 + " -> " + dt2025-01-29T14:30:45);72 } catch (DateTimeParseException e) {output2025-01-29T14:30:45 -> 2025-01-29T14:30:45All 3 passes — pass 1 is the card above pass stredt1 2025-01-29T14:30:45 — 2025-01-29T14:30:45 2 2025-13-01T14:30:45 java.time.format.DateTimeParseException: Text '2025-13-01T14:30:45' could not be parsed: Invalid value for MonthOfYear (valid values 1 - 12): 13 — 3 not-a-datetime java.time.format.DateTimeParseException: Text 'not-a-datetime' could not be parsed at index 0 — catch (DateTimeParseException e)
pass 1 of 271 System.out.println(str + " -> " + dt);72} catch (DateTimeParseException ejava.time.format.DateTimeParseException: Text '2025-13-01T14:30:45' could not be parsed: Invalid value for MonthOfYear (valid values 1 - 12): 13) {73 System.out.println(str2025-13-01T14:30:45 + " -> ERROR: Invalid format");74}output2025-13-01T14:30:45 -> ERROR: Invalid formatcatch (DateTimeParseException e)
pass 2 of 271 System.out.println(str + " -> " + dt);72} catch (DateTimeParseException ejava.time.format.DateTimeParseException: Text 'not-a-datetime' could not be parsed at index 0) {73 System.out.println(strnot-a-datetime + " -> ERROR: Invalid format");74}outputnot-a-datetime -> ERROR: Invalid formatSystem.out.println(" Safe parse:");
77// Safe parse helper78System.out.println("\nSafe parse:");79System.out.println(safeParseDateTime("2025-01-29T14:30:45"));80System.out.println(safeParseDateTime("invalid"));output Safe parse:public static LocalDateTime safeParseDateTime(String str)
pass 1 of 283public static LocalDateTime safeParseDateTime(String str2025-01-29T14:30:45) {84 try {try
pass 1 of 283public static LocalDateTime safeParseDateTime(String str) {84 try {85 return LocalDateTime.parse(str2025-01-29T14:30:45);86 } catch (DateTimeParseException e) {System.out.println(safeParseDateTime("2025-01-29T14:30:45"));
78 System.out.println("\nSafe parse:");79 System.out.println(safeParseDateTime("2025-01-29T14:30:45"));80 System.out.println(safeParseDateTime("invalid"));81}output2025-01-29T14:30:45public static LocalDateTime safeParseDateTime(String str)
pass 2 of 283public static LocalDateTime safeParseDateTime(String strinvalid) {84 try {try
pass 2 of 283public static LocalDateTime safeParseDateTime(String str) {84 try {85 return LocalDateTime.parse(strinvalid);86 } catch (DateTimeParseException e) {catch (DateTimeParseException e)
85 return LocalDateTime.parse(str);86} catch (DateTimeParseException ejava.time.format.DateTimeParseException: Text 'invalid' could not be parsed at index 0) {87 System.out.println("Invalid datetime: " + strinvalid);88 return null;89}outputInvalid datetime: invalidSystem.out.println(safeParseDateTime("invalid"));
79 System.out.println(safeParseDateTime("2025-01-29T14:30:45"));80 System.out.println(safeParseDateTime("invalid"));81}outputnull
iso ← 2024-12-05T09:15:00, dt1 ← 2024-12-05T09:15, custom1 ← 29/01/2025 14:30
12public static void main(String[] args) {13 // Parse ISO format14 String iso→ 2024-12-05T09:15:00 = "2024-12-05T09:15:00";15 LocalDateTime dt1→ 2024-12-05T09:15 = LocalDateTime.parse(iso2024-12-05T09:15:00);16 System.out.println("Parsed ISO: " + dt12024-12-05T09:15);1718 // Parse with custom pattern19 String custom1→ 29/01/2025 14:30 = "29/01/2025 14:30";20 DateTimeFormatter fmt1→ Value(DayOfMonth,2)'/'Value(MonthOfYear,2)'/'Value(YearOfEra,4,19,EXCEEDS_PAD)' 'Value(HourOfDay,2)':'Value(MinuteOfHour,2) = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm");21 LocalDateTime dt2→ 2025-01-29T14:30 = LocalDateTime.parse(custom129/01/2025 14:30, fmt1Value(DayOfMonth,2)'/'Value(MonthOfYear,2)'/'Value(YearOfEra,4,19,EXCEEDS_PAD)' 'Value(HourOfDay,2)':'Value(MinuteOfHour,2));22 System.out.println("Parsed " + custom129/01/2025 14:30 + ": " + dt22025-01-29T14:30);2324 // Parse various formats25 System.out.println("\nParse various formats:");26 27 String[] dateTimeStrings = {28 "2025-01-29 14:30:45",29 "01/29/2025 02:30 PM",30 "29-Jan-2025 14:30"31 };32 33 DateTimeFormatter[] formatters = {34 DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"),35 DateTimeFormatter.ofPattern("MM/dd/yyyy hh:mm a", Locale.US),36 DateTimeFormatter.ofPattern("dd-MMM-yyyy HH:mm", Locale.US)37 };outputParsed ISO: 2024-12-05T09:15 Parsed 29/01/2025 14:30: 2025-01-29T14:30 Parse various formats:dt ← 2025-01-29T14:30:45
pass 1 of 339for (int i0 = 0; i < dateTimeStrings.length3; i++) {40 LocalDateTime dt→ 2025-01-29T14:30:45 = LocalDateTime.parse(dateTimeStrings[i]2025-01-29 14:30:45, formatters[i]Value(YearOfEra,4,19,EXCEEDS_PAD)'-'Value(MonthOfYear,2)'-'Value(DayOfMonth,2)' 'Value(HourOfDay,2)':'Value(MinuteOfHour,2)':'Value(SecondOfMinute,2));41 System.out.println(dateTimeStrings[i]2025-01-29 14:30:45 + " -> " + dt2025-01-29T14:30:45);42}output2025-01-29 14:30:45 -> 2025-01-29T14:30:45All 3 passes — pass 1 is the card above pass idateTimeStrings[i]formatters[i]dt1 0 2025-01-29 14:30:45 Value(YearOfEra,4,19,EXCEEDS_PAD)'-'Value(MonthOfYear,2)'-'Value(DayOfMonth,2)' 'Value(HourOfDay,2)':'Value(MinuteOfHour,2)':'Value(SecondOfMinute,2) 2025-01-29T14:30:45 2 1 01/29/2025 02:30 PM Value(MonthOfYear,2)'/'Value(DayOfMonth,2)'/'Value(YearOfEra,4,19,EXCEEDS_PAD)' 'Value(ClockHourOfAmPm,2)':'Value(MinuteOfHour,2)' 'Text(AmPmOfDay,SHORT) 2025-01-29T14:30 3 2 29-Jan-2025 14:30 Value(DayOfMonth,2)'-'Text(MonthOfYear,SHORT)'-'Value(YearOfEra,4,19,EXCEEDS_PAD)' 'Value(HourOfDay,2)':'Value(MinuteOfHour,2) 2025-01-29T14:30 date1 ← 2025-01-29, date2 ← 2025-01-29, time1 ← 14:30:45, time2 ← 14:30
44// Parse dates45System.out.println("\nParse dates:");46LocalDate date1→ 2025-01-29 = LocalDate.parse("2025-01-29");47System.out.println("ISO date: " + date12025-01-29);4849LocalDate date2→ 2025-01-29 = LocalDate.parse("01/29/2025", DateTimeFormatter.ofPattern("MM/dd/yyyy"));50System.out.println("US date: " + date22025-01-29);5152// Parse times53System.out.println("\nParse times:");54LocalTime time1→ 14:30:45 = LocalTime.parse("14:30:45");55System.out.println("ISO time: " + time114:30:45);5657LocalTime time2→ 14:30 = LocalTime.parse("02:30 PM", DateTimeFormatter.ofPattern("hh:mm a", Locale.US));58System.out.println("12-hour time: " + time214:30);5960// Handle parse errors61System.out.println("\nHandle parse errors:");62String[] testStrings = {63 "2025-01-29T14:30:45",64 "2025-13-01T14:30:45", // invalid month65 "not-a-datetime"66};output Parse dates: ISO date: 2025-01-29 US date: 2025-01-29 Parse times: ISO time: 14:30:45 12-hour time: 14:30 Handle parse errors:for (String str : testStrings)
pass 1 of 368for (String str2025-01-29T14:30:45 : testStrings) {69 try {All 3 passes — pass 1 is the card above pass stre1 2025-01-29T14:30:45 — 2 2025-13-01T14:30:45 java.time.format.DateTimeParseException: Text '2025-13-01T14:30:45' could not be parsed: Invalid value for MonthOfYear (valid values 1 - 12): 13 3 not-a-datetime java.time.format.DateTimeParseException: Text 'not-a-datetime' could not be parsed at index 0 dt ← 2025-01-29T14:30:45
pass 1 of 368for (String str : testStrings) {69 try {70 LocalDateTime dt→ 2025-01-29T14:30:45 = LocalDateTime.parse(str2025-01-29T14:30:45);71 System.out.println(str2025-01-29T14:30:45 + " -> " + dt2025-01-29T14:30:45);72 } catch (DateTimeParseException e) {output2025-01-29T14:30:45 -> 2025-01-29T14:30:45All 3 passes — pass 1 is the card above pass stredt1 2025-01-29T14:30:45 — 2025-01-29T14:30:45 2 2025-13-01T14:30:45 java.time.format.DateTimeParseException: Text '2025-13-01T14:30:45' could not be parsed: Invalid value for MonthOfYear (valid values 1 - 12): 13 — 3 not-a-datetime java.time.format.DateTimeParseException: Text 'not-a-datetime' could not be parsed at index 0 — catch (DateTimeParseException e)
pass 1 of 271 System.out.println(str + " -> " + dt);72} catch (DateTimeParseException ejava.time.format.DateTimeParseException: Text '2025-13-01T14:30:45' could not be parsed: Invalid value for MonthOfYear (valid values 1 - 12): 13) {73 System.out.println(str2025-13-01T14:30:45 + " -> ERROR: Invalid format");74}output2025-13-01T14:30:45 -> ERROR: Invalid formatcatch (DateTimeParseException e)
pass 2 of 271 System.out.println(str + " -> " + dt);72} catch (DateTimeParseException ejava.time.format.DateTimeParseException: Text 'not-a-datetime' could not be parsed at index 0) {73 System.out.println(strnot-a-datetime + " -> ERROR: Invalid format");74}outputnot-a-datetime -> ERROR: Invalid formatSystem.out.println(" Safe parse:");
77// Safe parse helper78System.out.println("\nSafe parse:");79System.out.println(safeParseDateTime("2025-01-29T14:30:45"));80System.out.println(safeParseDateTime("invalid"));output Safe parse:public static LocalDateTime safeParseDateTime(String str)
pass 1 of 283public static LocalDateTime safeParseDateTime(String str2025-01-29T14:30:45) {84 try {try
pass 1 of 283public static LocalDateTime safeParseDateTime(String str) {84 try {85 return LocalDateTime.parse(str2025-01-29T14:30:45);86 } catch (DateTimeParseException e) {System.out.println(safeParseDateTime("2025-01-29T14:30:45"));
78 System.out.println("\nSafe parse:");79 System.out.println(safeParseDateTime("2025-01-29T14:30:45"));80 System.out.println(safeParseDateTime("invalid"));81}output2025-01-29T14:30:45public static LocalDateTime safeParseDateTime(String str)
pass 2 of 283public static LocalDateTime safeParseDateTime(String strinvalid) {84 try {try
pass 2 of 283public static LocalDateTime safeParseDateTime(String str) {84 try {85 return LocalDateTime.parse(strinvalid);86 } catch (DateTimeParseException e) {catch (DateTimeParseException e)
85 return LocalDateTime.parse(str);86} catch (DateTimeParseException ejava.time.format.DateTimeParseException: Text 'invalid' could not be parsed at index 0) {87 System.out.println("Invalid datetime: " + strinvalid);88 return null;89}outputInvalid datetime: invalidSystem.out.println(safeParseDateTime("invalid"));
79 System.out.println(safeParseDateTime("2025-01-29T14:30:45"));80 System.out.println(safeParseDateTime("invalid"));81}outputnull
parsing
Converting a string representation back into a date/time object using a matching format pattern.
Locale-Specific Formatting
LocaleFormat.java
Replay: real traced execution (multi-file project)
// Locale-specific formatting
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.FormatStyle;
import java.util.Locale;
public class LocaleFormat {
public static void main(String[] args) {
LocalDateTime dt = LocalDateTime.of(2025, 1, 29, 14, 30, 45);
System.out.println("DateTime: " + dt);
System.out.println();
// Different locales
Locale[] locales = {
Locale.US,
Locale.UK,
Locale.FRANCE,
Locale.GERMANY,
Locale.JAPAN
};
System.out.println("Locale-specific dates:");
for (Locale locale : locales) {
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL).withLocale(locale);
System.out.println(locale.getDisplayName(Locale.US) + ": " + dt.format(formatter));
}
// Different styles
System.out.println("\nDifferent styles (US locale):");
FormatStyle[] styles = {FormatStyle.FULL, FormatStyle.LONG, FormatStyle.MEDIUM, FormatStyle.SHORT};
for (FormatStyle style : styles) {
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDate(style).withLocale(Locale.US);
System.out.println(style + ": " + dt.format(formatter));
}
// Date and time together
System.out.println("\nDate and time (US):");
DateTimeFormatter dtFormatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM).withLocale(Locale.US);
System.out.println(dt.format(dtFormatter));
// Custom pattern with locale
System.out.println("\nCustom with locale:");
DateTimeFormatter custom = DateTimeFormatter.ofPattern("EEEE, MMMM dd, yyyy", Locale.US);
System.out.println("US: " + dt.format(custom));
DateTimeFormatter customFr = DateTimeFormatter.ofPattern("EEEE dd MMMM yyyy", Locale.FRANCE);
System.out.println("French: " + dt.format(customFr));
// Month names in different locales
System.out.println("\nMonth names:");
DateTimeFormatter monthFormatter = DateTimeFormatter.ofPattern("MMMM");
for (Locale locale : new Locale[]{Locale.US, Locale.FRANCE, Locale.GERMANY}) {
String month = dt.format(monthFormatter.withLocale(locale));
System.out.println(locale.getDisplayLanguage(Locale.US) + ": " + month);
}
// Day names in different locales
System.out.println("\nDay names:");
DateTimeFormatter dayFormatter = DateTimeFormatter.ofPattern("EEEE");
for (Locale locale : new Locale[]{Locale.US, Locale.FRANCE, Locale.GERMANY}) {
String day = dt.format(dayFormatter.withLocale(locale));
System.out.println(locale.getDisplayLanguage(Locale.US) + ": " + day);
}
// AM/PM in different locales
System.out.println("\nAM/PM:");
DateTimeFormatter ampmFormatter = DateTimeFormatter.ofPattern("hh:mm a");
for (Locale locale : new Locale[]{Locale.US, Locale.UK, Locale.FRANCE}) {
String time = dt.format(ampmFormatter.withLocale(locale));
System.out.println(locale.getDisplayCountry(Locale.US) + ": " + time);
}
}
}
dt ← 2025-01-29T14:30:45
10public static void main(String[] args) {11 LocalDateTime dt→ 2025-01-29T14:30:45 = LocalDateTime.of(2025, 1, 29, 14, 30, 45);12 13 System.out.println("DateTime: " + dt2025-01-29T14:30:45);14 System.out.println();1516 // Different locales17 Locale[] locales = {18 Locale.US,19 Locale.UK,20 Locale.FRANCE,21 Locale.GERMANY,22 Locale.JAPAN23 };2425 System.out.println("Locale-specific dates:");26 for (Locale locale : locales) {outputDateTime: 2025-01-29T14:30:45 Locale-specific dates:formatter ← Localized(FULL,)
pass 1 of 525System.out.println("Locale-specific dates:");26for (Locale localeen_US : locales) {27 DateTimeFormatter formatter→ Localized(FULL,) = DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL).withLocale(localeen_US);28 System.out.println(locale.getDisplayName(Locale.US) + ": " + dt.format(formatterLocalized(FULL,)));29}outputEnglish (United States): Wednesday, January 29, 2025All 5 passes — pass 1 is the card above pass localeformatter1 en_US Localized(FULL,) 2 en_GB Localized(FULL,) 3 fr_FR Localized(FULL,) 4 de_DE Localized(FULL,) 5 ja_JP Localized(FULL,) FormatStyle[] styles = {FormatStyle.FULL, FormatStyle.LONG, FormatStyl…
31// Different styles32System.out.println("\nDifferent styles (US locale):");33FormatStyle[] styles = {FormatStyle.FULL, FormatStyle.LONG, FormatStyle.MEDIUM, FormatStyle.SHORT};output Different styles (US locale):formatter ← Localized(FULL,)
pass 1 of 435for (FormatStyle styleFULL : styles) {36 DateTimeFormatter formatter→ Localized(FULL,) = DateTimeFormatter.ofLocalizedDate(styleFULL).withLocale(Locale.US);37 System.out.println(styleFULL + ": " + dt.format(formatterLocalized(FULL,)));38}outputFULL: Wednesday, January 29, 2025All 4 passes — pass 1 is the card above pass styleformatter1 FULL Localized(FULL,) 2 LONG Localized(LONG,) 3 MEDIUM Localized(MEDIUM,) 4 SHORT Localized(SHORT,) dtFormatter ← Localized(MEDIUM,MEDIUM), custom ← Text(DayOfWeek)','' 'Text(MonthOfYear)' 'Value(DayOfMonth,2)','' 'Value(YearOfEra,4,19,EXCEEDS_PAD)
40// Date and time together41System.out.println("\nDate and time (US):");42DateTimeFormatter dtFormatter→ Localized(MEDIUM,MEDIUM) = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM).withLocale(Locale.US);43System.out.println(dt.format(dtFormatterLocalized(MEDIUM,MEDIUM)));4445// Custom pattern with locale46System.out.println("\nCustom with locale:");47DateTimeFormatter custom→ Text(DayOfWeek)','' 'Text(MonthOfYear)' 'Value(DayOfMonth,2)','' 'Value(YearOfEra,4,19,EXCEEDS_PAD) = DateTimeFormatter.ofPattern("EEEE, MMMM dd, yyyy", Locale.US);48System.out.println("US: " + dt.format(customText(DayOfWeek)','' 'Text(MonthOfYear)' 'Value(DayOfMonth,2)','' 'Value(YearOfEra,4,19,EXCEEDS_PAD)));4950DateTimeFormatter customFr→ Text(DayOfWeek)' 'Value(DayOfMonth,2)' 'Text(MonthOfYear)' 'Value(YearOfEra,4,19,EXCEEDS_PAD) = DateTimeFormatter.ofPattern("EEEE dd MMMM yyyy", Locale.FRANCE);51System.out.println("French: " + dt.format(customFrText(DayOfWeek)' 'Value(DayOfMonth,2)' 'Text(MonthOfYear)' 'Value(YearOfEra,4,19,EXCEEDS_PAD)));5253// Month names in different locales54System.out.println("\nMonth names:");55DateTimeFormatter monthFormatter→ Text(MonthOfYear) = DateTimeFormatter.ofPattern("MMMM");56for (Locale locale : new Locale[]{Locale.US, Locale.FRANCE, Locale.GERMANY}) {output Date and time (US): Jan 29, 2025, 2:30:45 PM Custom with locale: US: Wednesday, January 29, 2025 French: mercredi 29 janvier 2025 Month names:month ← January
pass 1 of 355DateTimeFormatter monthFormatter = DateTimeFormatter.ofPattern("MMMM");56for (Locale localeen_US : new Locale[]{Locale.US, Locale.FRANCE, Locale.GERMANY}) {57 String month→ January = dt.format(monthFormatter.withLocale(localeen_US));58 System.out.println(locale.getDisplayLanguage(Locale.US) + ": " + monthJanuary);59}outputEnglish: JanuaryAll 3 passes — pass 1 is the card above pass localemonth1 en_US January 2 fr_FR janvier 3 de_DE Januar dayFormatter ← Text(DayOfWeek)
61// Day names in different locales62System.out.println("\nDay names:");63DateTimeFormatter dayFormatter→ Text(DayOfWeek) = DateTimeFormatter.ofPattern("EEEE");64for (Locale locale : new Locale[]{Locale.US, Locale.FRANCE, Locale.GERMANY}) {output Day names:day ← Wednesday
pass 1 of 363DateTimeFormatter dayFormatter = DateTimeFormatter.ofPattern("EEEE");64for (Locale localeen_US : new Locale[]{Locale.US, Locale.FRANCE, Locale.GERMANY}) {65 String day→ Wednesday = dt.format(dayFormatter.withLocale(localeen_US));66 System.out.println(locale.getDisplayLanguage(Locale.US) + ": " + dayWednesday);67}outputEnglish: WednesdayAll 3 passes — pass 1 is the card above pass localeday1 en_US Wednesday 2 fr_FR mercredi 3 de_DE Mittwoch ampmFormatter ← Value(ClockHourOfAmPm,2)':'Value(MinuteOfHour,2)' 'Text(AmPmOfDay,SHORT)
69// AM/PM in different locales70System.out.println("\nAM/PM:");71DateTimeFormatter ampmFormatter→ Value(ClockHourOfAmPm,2)':'Value(MinuteOfHour,2)' 'Text(AmPmOfDay,SHORT) = DateTimeFormatter.ofPattern("hh:mm a");72for (Locale locale : new Locale[]{Locale.US, Locale.UK, Locale.FRANCE}) {output AM/PM:time ← 02:30 PM
pass 1 of 371DateTimeFormatter ampmFormatter = DateTimeFormatter.ofPattern("hh:mm a");72for (Locale localeen_US : new Locale[]{Locale.US, Locale.UK, Locale.FRANCE}) {73 String time→ 02:30 PM = dt.format(ampmFormatter.withLocale(localeen_US));74 System.out.println(locale.getDisplayCountry(Locale.US) + ": " + time02:30 PM);75}outputUnited States: 02:30 PMAll 3 passes — pass 1 is the card above pass localetime1 en_US 02:30 PM 2 en_GB 02:30 pm 3 fr_FR 02:30 PM
locale
A geographical/cultural region that affects how dates are displayed, like month names and date order.
Pattern Symbols
yyyy: 4-digit yearMM: 2-digit monthdd: 2-digit dayHH: 24-hour (00-23)hh: 12-hour (01-12)mm: minutess: seconda: AM/PM marker
Common Formatters
ISO_LOCAL_DATE: 2025-01-29ISO_LOCAL_TIME: 14:30:45ISO_LOCAL_DATE_TIME: 2025-01-29T14:30:45
Exercise: Practical.java
Parse a date from user input in multiple formats (MM/dd/yyyy, yyyy-MM-dd, dd-MMM-yyyy) and output in a standardized format