Careeroza
Formatting and Parsing
DateTimeFormatter
| Pattern | Meaning | Example |
|---|---|---|
dd | day of month, 2 digits | 05 |
MM / MMM / MMMM | month number / short / full name | 08 / Aug / August |
yyyy | year | 2024 |
EEE / EEEE | day name short / full | Thu / Thursday |
HH / hh | hour 0-23 / 1-12 | 14 / 02 |
mm, ss | minutes, seconds | 30, 05 |
a | AM/PM | PM |
Tip: MM is month and mm is minutes. Mixing them up is a very common bug.
Note: By default, parsing quietly adjusts impossible days (31 Feb becomes 29 Feb). To validate user input such as a date of birth, use ResolverStyle.STRICT with the year pattern uuuu.
Format and Parse
Example
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import java.time.format.ResolverStyle;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
LocalDateTime dt = LocalDateTime.of(2024, 8, 15, 14, 30);
DateTimeFormatter indian = DateTimeFormatter.ofPattern("dd/MM/yyyy");
DateTimeFormatter pretty = DateTimeFormatter.ofPattern("EEE, d MMM yyyy, hh:mm a", Locale.ENGLISH);
System.out.println(dt.format(indian));
System.out.println(dt.format(pretty));
System.out.println(dt.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME));
LocalDate dob = LocalDate.parse("26/01/2000", indian);
System.out.println("Parsed DOB: " + dob);
System.out.println("ISO parse : " + LocalDate.parse("2024-12-25"));
// the default (SMART) resolver quietly adjusts 31 Feb to the last valid day
System.out.println("31/02/2024 -> " + LocalDate.parse("31/02/2024", indian));
DateTimeFormatter strict = DateTimeFormatter.ofPattern("dd/MM/uuuu").withResolverStyle(ResolverStyle.STRICT);
for (String input : new String[] { "31/02/2024", "32/01/2024" }) {
try {
LocalDate.parse(input, strict);
} catch (DateTimeParseException e) {
System.out.println("Strict parser rejected " + input);
}
}
}
}Output
15/08/2024 Thu, 15 Aug 2024, 02:30 PM 2024-08-15T14:30:00 Parsed DOB: 2000-01-26 ISO parse : 2024-12-25 31/02/2024 -> 2024-02-29 Strict parser rejected 31/02/2024 Strict parser rejected 32/01/2024