Master java skills

1. Introduction

Prior to Java 8, earlier versions relied on the Date and Calendar classes within the java.util package to manage date and time functionalities. But with java 8, LocalDate, LocalTime and other classes from java.time package provide a better way to deal with date and time.

Below table list down the differences between date/time api from java.util package vs that from java.time package in java 8

Challenges in Existing Date/Time APIsSolutions in Java 8 Date and Time APIs
Thread Safety: The Date and Calendar classes lack thread safety, leading to concurrency issues.The Java 8 Date and Time APIs are immutable and thread-safe, mitigating concurrency challenges.
API Design and Clarity: Date and Calendar APIs have suboptimal design and insufficient methods.Java 8 Date/Time API adopts an ISO-centric approach with consistent domain models, offering a comprehensive set of utility methods for easier use.
ZonedDate and Time: Older APIs require additional logic for time-zone handling.Java 8 APIs simplify time-zone management with dedicated Local and ZonedDate/Time APIs.

Here’s a fun fact: before Java 8, handling time in Java was like solving a puzzle with missing pieces. But with java.time, it’s more like snapping together LEGO bricks – simple and enjoyable.

2. Basic Concepts

Java Date and Time API ConceptsDescriptionExample
LocalDateRepresents a date without a time component.LocalDate currentDate = LocalDate.now();
LocalTimeRepresents a time without a date component.LocalTime currentTime = LocalTime.now();
LocalDateTimeCombines date and time, representing both.LocalDateTime currentDateTime = LocalDateTime.now();
DateTimeFormatterFormats and parses date and time objects.DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
DurationRepresents a time-based amount, e.g., time span.Duration duration = Duration.between(startDateTime, endDateTime);
PeriodRepresents a date-based amount, e.g., difference between two dates.Period period = Period.between(startDate, endDate);

2.1 LocalDate

LocalDate is an immutable date-time object that represents a date, often viewed as year-month-day. Other date fields, such as day-of-year, day-of-week and week-of-year, can also be accessed. For example, the value “2nd October 2007” can be stored in a LocalDate.

import java.time.LocalDate;

public class DateExample {
    public static void main(String[] args) {
        // Creating a LocalDate object representing the current date
        LocalDate currentDate = LocalDate.now();
        System.out.println("Current Date: " + currentDate);

        // Creating a specific date
        LocalDate specificDate = LocalDate.of(2023, 12, 5);
        System.out.println("Specific Date: " + specificDate);
    }
}

Output:

Current Date: 2023-12-09
Specific Date: 2023-12-05

2.2 LocalTime and LocalDateTime

LocalTime in the Java Date API represents a time without a date component. For instance, you can use it to store the time of day like 12:30 PM.

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

LocalDateTime combines date and time, providing a representation like “2023-12-05T15:30”.

LocalDateTime currentDateTime = LocalDateTime.now();
System.out.println("Current Date and Time: " + currentDateTime);
import java.time.LocalTime;
import java.time.LocalDateTime;

public class TimeExample {
    public static void main(String[] args) {
        // Creating LocalTime object representing the current time
        LocalTime currentTime = LocalTime.now();
        System.out.println("Current Time: " + currentTime);

        // Creating LocalDateTime object representing the current date and time
        LocalDateTime currentDateTime = LocalDateTime.now();
        System.out.println("Current Date and Time: " + currentDateTime);
    }
}

Output:

Current Time: 23:08:46.673182400
Current Date and Time: 2023-12-09T23:08:46.673182400

2.3 Formatting and Parsing

Formatting in the Java Date API involves presenting a date or time in a specific pattern. Parsing, on the other hand, is the reverse process of converting a formatted date or time string back to a LocalDateTime object.

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class FormatParseExample {
    public static void main(String[] args) {
        // Formatting a date
        LocalDateTime currentDateTime = LocalDateTime.now();
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        String formattedDateTime = currentDateTime.format(formatter);
        System.out.println("Formatted Date and Time: " + formattedDateTime);

        // Parsing a date
        String dateStr = "2023-12-05 15:30:00";
        LocalDateTime parsedDateTime = LocalDateTime.parse(dateStr, formatter);
        System.out.println("Parsed Date and Time: " + parsedDateTime);
    }
}

Output:

Formatted Date and Time: 2023-12-09 23:09:50
Parsed Date and Time: 2023-12-05T15:30

2.4 Duration and Period

Duration in the Java Date API represents a time-based amount, such as the difference between two instants in time. Period represents a date-based amount, like the difference between two dates.

These classes are useful for measuring and manipulating time spans in your Java applications.

import java.time.Duration;
import java.time.LocalDateTime;
import java.time.Period;
import java.time.LocalDate;

public class DurationPeriodExample {
    public static void main(String[] args) {
        // Calculating duration between two times
        LocalDateTime startDateTime = LocalDateTime.of(2023, 12, 5, 10, 0);
        LocalDateTime endDateTime = LocalDateTime.of(2023, 12, 5, 15, 30);
        Duration duration = Duration.between(startDateTime, endDateTime);
        System.out.println("Duration: " + duration.toHours() + " hours");

        // Calculating period between two dates
        LocalDate startDate = LocalDate.of(2023, 1, 1);
        LocalDate endDate = LocalDate.of(2023, 12, 31);
        Period period = Period.between(startDate, endDate);
        System.out.println("Period: " + period.getMonths() + " months");
    }
}

Output:

Duration: 5 hours
Period: 11 months

3. Conclusion

This tutorial covers the basics of the Java Date API, including working with LocalDateLocalTime, and LocalDateTime, formatting and parsing, and calculating durations and periods. The examples provided should give you a good starting point for using the Java Date API in your projects.

Feel free to expand on this tutorial by exploring additional features of the java.time package and incorporating more advanced concepts like time zones and working with Instant.

1 thought on “Java Date API

  1. So well explained and creatively written. Thank you so much for giving these information for free.

Comments are closed.