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
// 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));
}
}
DateTimeFormatter
A formatter for printing and parsing date-time objects using predefined or custom patterns.
Custom Patterns
Patterns.java
// 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 = ;
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 = ;
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));
}
}
format_pattern
A string of letters representing date/time fields like `yyyy` for year, `MM` for month, `dd` for day.
Formatting Output
Format.java
// 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 = ;
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 = ;
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);
}
}
Parsing Input
Parse.java
// 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 = ;
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 = ;
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;
}
}
}
parsing
Converting a string representation back into a date/time object using a matching format pattern.
Locale-Specific Formatting
LocaleFormat.java
// 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);
}
}
}
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