Java Date and Time

Java provides several classes to handle date and time operations such as java.util.Date, java.util.Calendar, java.text.DateFormat, java.time (Java 8 and later).

The java.util.Date class represents a specific point in time and is widely used, but it has several limitations such as not being able to represent a time zone and being mutable.

The java.time package, introduced in Java 8, provides more comprehensive and flexible classes to handle date and time operations.

This guide will focus on the java.time package.

Working with LocalDate and LocalTime

  • The LocalDate class represents a date (year, month, day) without time zone information.
  • The LocalTime class represents a time (hour, minute, second) without date information.


// Current date
LocalDate currentDate =;
System.out.println("Current Date: " + currentDate);

// Current time
LocalTime currentTime =;
System.out.println("Current Time: " + currentTime);

// Specific date
LocalDate specificDate = LocalDate.of(2022, Month.JANUARY, 25);
System.out.println("Specific Date: " + specificDate);

// Specific time
LocalTime specificTime = LocalTime.of(12, 30, 45);
System.out.println("Specific Time: " + specificTime);

Working with LocalDateTime

The LocalDateTime class represents a date-time (year, month, day, hour, minute, second) without time zone information.


// Current date and time
LocalDateTime currentDateTime =;
System.out.println("Current Date and Time: " + currentDateTime);

// Specific date and time
LocalDateTime specificDateTime = LocalDateTime.of(2022, Month.JANUARY, 25, 12, 30, 45);
System.out.println("Specific Date and Time: " + specificDateTime);

Working with ZonedDateTime

The ZonedDateTime class represents a date-time with a time zone.


// Current date and time in specific time zone
ZonedDateTime zonedDateTime ="America/Los_Angeles"));
System.out.println("Zoned Date and Time: " + zonedDateTime);

// Specific date and time in specific time zone
ZonedDateTime specificZonedDateTime = ZonedDateTime.of(2022, Month.JANUARY, 25, 12, 30, 45, 0, ZoneId.of("Asia/Tokyo"));
System.out.println("Specific Zoned Date and Time: " + specificZonedDateTime);

Formatting Date and Time

The java.time package provides several classes to format date and time, including DateTimeFormatter, Period, and Duration.


// Formatting date
LocalDate date =;
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
String formattedDate = date.format(formatter);
System.out.println("Formatted Date: " + formattedDate);

// Formatting time
LocalTime time =;
DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("HH:mm:ss");
String formattedTime = time.format(timeFormatter);
System.out.println("Formatted Time: " + formattedTime);

// Formatting date-time
LocalDateTime dateTime =;
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss");
String formattedDateTime = dateTime.format(dateTimeFormatter);
System.out.println("Formatted Date and Time: " + formattedDateTime);

// Formatting zoned date-time
ZonedDateTime zonedDateTime =;
DateTimeFormatter zonedDateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss z");
String formattedZonedDateTime = zonedDateTime.format(zonedDateTimeFormatter);
System.out.println("Formatted Zoned Date and Time: " + formattedZonedDateTime);

Manipulating Date and Time

The java.time package provides methods to manipulate date and time such as adding or subtracting time.


// Adding days to date
LocalDate date =;
LocalDate futureDate = date.plusDays(5);
System.out.println("Future Date: " + futureDate);

// Subtracting hours from time
LocalTime time =;
LocalTime previousTime = time.minusHours(5);
System.out.println("Previous Time: " + previousTime);

// Adding months to date-time
LocalDateTime dateTime =;
LocalDateTime futureDateTime = dateTime.plusMonths(5);
System.out.println("Future Date and Time: " + futureDateTime);

// Subtracting minutes from zoned date-time
ZonedDateTime zonedDateTime =;
ZonedDateTime previousZonedDateTime = zonedDateTime.minusMinutes(30);
System.out.println("Previous Zoned Date and Time: " + previousZonedDateTime);


The java.time package provides comprehensive and flexible classes for handling date and time operations in Java. It replaces the outdated java.util.Date and java.util.Calendar classes.

This guide has covered the basics of the java.time package, including creating and formatting date, time, and date-time objects, and manipulating date and time.

To learn more about the topic, refer to the official Java documentation.

Java Basics