Course – LS – All

Get started with Spring and Spring Boot, through the Learn Spring course:


1. Introduction

Dealing with date and time values is a common task. Sometimes, we may need to convert a TemporalAccessor object to a LocalDate object to perform date-specific operations. Hence, this could be useful when parsing date-time strings or extracting date components from a date-time object.

In this tutorial, we’ll explore different approaches to achieve this conversion in Java.

2. Using LocalDate.from() Method

One straightforward approach to convert a TemporalAccessor to a LocalDate is to use the LocalDate.from(TemporalAccessor temporal) method. Practically, this method extracts date components (year, month, and day) from the TemporalAccessor and constructs a LocalDate object. Let’s see an example:

String dateString = "2022-03-28";
TemporalAccessor temporalAccessor = DateTimeFormatter.ISO_LOCAL_DATE.parse(dateString);
public void givenTemporalAccessor_whenUsingLocalDateFrom_thenConvertToLocalDate() {
    LocalDate convertedDate = LocalDate.from(temporalAccessor);
    assertEquals(LocalDate.of(2022, 3, 28), convertedDate);

In this code snippet, we initialize a String variable dateString with the value (2022-03-28), representing a date in the (ISO 8601) format. In addition, we use the DateTimeFormatter.ISO_LOCAL_DATE.parse() method to parse this string into a TemporalAccessor object temporalAccessor.

Subsequently, we employ the LocalDate.from(temporalAccessor) method to convert temporalAccessor into a LocalDate object convertedDate, effectively extracting and constructing the date components.

Finally, through the assertion assertEquals(LocalDate.of(2022, 3, 28), convertedDate), we ensure that the conversion results in convertedDate matching the expected date.

3. Using TemporalQueries

Another approach to convert a TemporalAccessor to a LocalDate is by using TemporalQueries. We can define a custom TemporalQuery to extract the necessary date components and construct a LocalDate object. Here’s an example:

public void givenTemporalAccessor_whenUsingTemporalQueries_thenConvertToLocalDate() {
    int year = temporalAccessor.query(TemporalQueries.localDate()).getYear();
    int month = temporalAccessor.query(TemporalQueries.localDate()).getMonthValue();
    int day = temporalAccessor.query(TemporalQueries.localDate()).getDayOfMonth();

    LocalDate convertedDate = LocalDate.of(year, month, day);
    assertEquals(LocalDate.of(2022, 3, 28), convertedDate);

In this test method, we invoke the temporalAccessor.query(TemporalQueries.localDate()) method to obtain a LocalDate instance representing the date extracted from temporalAccessor.

We then retrieve the year, month, and day components from this LocalDate instance using getYear(), getMonthValue(), and getDayOfMonth() methods, respectively. Subsequently, we construct a LocalDate object convertedDate using the LocalDate.of() method with these extracted components.

4. Conclusion

In conclusion, converting a TemporalAccessor to a LocalDate in Java can be achieved using the LocalDate.from() or TemporalQueries. Besides, these methods provide flexible and efficient ways to perform the conversion, enabling seamless integration of date-time functionalities in Java applications.

As usual, the accompanying source code can be found over on GitHub.

Course – LS – All

Get started with Spring and Spring Boot, through the Learn Spring course:

res – REST with Spring (eBook) (everywhere)
Notify of
Inline Feedbacks
View all comments