Java Date Conversion Guide 2025 | Generated by AI

Home 2026.01

Question: How to convert date formats in Java? What is the difference between LocalDate and SimpleDateFormat?

Answer:

In modern Java (Java 8+), there are two completely different date/time APIs you should be aware of:

Feature Old way (pre-Java 8) Modern way (Java 8+) Recommendation
Main classes java.util.Date, SimpleDateFormat LocalDate, LocalDateTime, ZonedDateTime, DateTimeFormatter Use modern API
Thread-safety Not thread-safe Thread-safe Modern is safer
Mutable / Immutable Mutable Immutable Modern is safer
Time-zone awareness Poor / confusing Clear (LocalDate = no zone, ZonedDateTime = with zone) Modern is clearer
Designed for Legacy code, old libraries New code (2014+) Prefer modern
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

public class Main {
    public static void main(String[] args) {
        // 1. String → LocalDate
        String dateStr = "2025-03-15";
        LocalDate date = LocalDate.parse(dateStr);                    // ISO format
        LocalDate date2 = LocalDate.parse("15/03/2025", 
                            DateTimeFormatter.ofPattern("dd/MM/yyyy"));

        // 2. LocalDate → String (different formats)
        System.out.println(date.format(DateTimeFormatter.ISO_LOCAL_DATE));     
        // 2025-03-15

        System.out.println(date.format(DateTimeFormatter.ofPattern("dd/MM/yyyy")));  
        // 15/03/2025

        System.out.println(date.format(DateTimeFormatter.ofPattern("MMM d, yyyy"))); 
        // Mar 15, 2025

        System.out.println(date.format(DateTimeFormatter.ofPattern("EEEE, MMMM dd yyyy"))); 
        // Saturday, March 15 2025
    }
}

Most common patterns:

Pattern Example output Meaning
yyyy-MM-dd 2025-03-15 ISO (default)
dd/MM/yyyy 15/03/2025 Very common in many countries
MM/dd/yyyy 03/15/2025 USA style
dd MMM yyyy 15 Mar 2025 Compact readable
EEEE, MMMM d yyyy Saturday, March 15 2025 Very readable

2. Old way – using SimpleDateFormat (avoid in new code)

import java.text.SimpleDateFormat;
import java.util.Date;

SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat sdf2 = new SimpleDateFormat("dd/MM/yyyy");

Date date = new Date();

// Date → String
String iso  = sdf1.format(date);
String euro = sdf2.format(date);

// String → Date
Date parsed = sdf1.parse("2025-03-15");   // ← can throw ParseException

Important warnings about SimpleDateFormat:

Quick conversion between old and new API

// Old → New
Date oldDate = new Date();
LocalDate newDate = oldDate.toInstant()
                         .atZone(ZoneId.systemDefault())
                         .toLocalDate();

// New → Old (usually only needed for legacy APIs)
Date fromLocal = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());

Summary – Which to use in 2025/2026?

Situation Recommended class(es)
New project / modern code LocalDate, LocalDateTime, ZonedDateTime, DateTimeFormatter
Reading/writing ISO dates (API, JSON, database) LocalDate.parse() + .format(ISO_LOCAL_DATE)
Need to show date to user (different countries) DateTimeFormatter.ofPattern(...)
Working with old libraries / JDBC that return java.util.Date Convert to LocalDate/LocalDateTime as soon as possible
Still maintaining very old code You may have to keep SimpleDateFormat (but wrap it carefully)

Bottom line (2025+):
Use java.time.* classes + DateTimeFormatter for almost everything.
Only touch SimpleDateFormat when you are forced to work with legacy code.

References:


Back

x-ai/grok-4.1-fast

Donate