Close

Java - Converting LocalTime, LocalDate and LocalDateTime to java.util.Calendar and java.util.Date

[Last Updated: Aug 3, 2020]

Java Date Time Java 

Following utility methods convert Java 8 LocalTime, LocalDate and LocalDateTime to java.util.Calendar and java.util.Date.

package com.logicbig.example;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.Calendar;
import java.util.Date;

public class LocalDateTimeToDate {

    public static Date localTimeToDate(LocalTime localTime) {
        Calendar calendar = Calendar.getInstance();
        calendar.clear();
        //assuming year/month/date information is not important
        calendar.set(0, 0, 0, localTime.getHour(), localTime.getMinute(), localTime.getSecond());
        return calendar.getTime();
    }

    public static Date localDateToDate(LocalDate localDate) {
        Calendar calendar = Calendar.getInstance();
        calendar.clear();
        //assuming start of day
        calendar.set(localDate.getYear(), localDate.getMonthValue()-1, localDate.getDayOfMonth());
        return calendar.getTime();
    }

    public static Date localDateTimeToDate(LocalDateTime localDateTime) {
        Calendar calendar = Calendar.getInstance();
        calendar.clear();
        calendar.set(localDateTime.getYear(), localDateTime.getMonthValue()-1, localDateTime.getDayOfMonth(),
                localDateTime.getHour(), localDateTime.getMinute(), localDateTime.getSecond());
        return calendar.getTime();
    }

    public static void main(String[] args) {
        Date date = localTimeToDate(LocalTime.now());
        System.out.println(date);

        date = localDateToDate(LocalDate.now());
        System.out.println(date);

        date = localDateTimeToDate(LocalDateTime.now());
        System.out.println(date);
    }
}
Wed Dec 31 13:18:27 CST 2
Mon Jun 11 00:00:00 CDT 2018
Mon Jun 11 13:18:27 CDT 2018

Above methods can be useful for simple cases. Use following methods if you want the conversion to be more accurate and want to target a specific time zone.

package com.logicbig.example;

import java.time.*;
import java.util.Date;

public class LocalDateTimeToDate2 {

    public static Date localTimeToDate(LocalTime localTime, int year, int month, int day,
                                       ZoneOffset zoneOffset) {
        LocalDateTime dateTime = localTime.atDate(LocalDate.of(year, month, day));
        return localDateTimeToDate(dateTime, zoneOffset);
    }

    public static Date localTimeToDate(LocalTime localTime, int year, int month, int day,
                                       ZoneId zoneId) {
        LocalDateTime dateTime = localTime.atDate(LocalDate.of(year, month, day));
        return localDateTimeToDate(dateTime, zoneId);
    }

    public static Date localDateToDate(LocalDate localDate, ZoneOffset zoneOffset) {
        LocalDateTime dateTime = localDate.atStartOfDay();//assuming start of day
        return localDateTimeToDate(dateTime, zoneOffset);
    }

    public static Date localDateToDate(LocalDate localDate, ZoneId zoneId) {
        LocalDateTime dateTime = localDate.atStartOfDay();//assuming start of day
        return localDateTimeToDate(dateTime, zoneId);
    }

    public static Date localDateTimeToDate(LocalDateTime localDateTime, ZoneId zoneId) {
        ZonedDateTime zonedDateTime = localDateTime.atZone(zoneId);
        return zoneDateTimeToDate(zonedDateTime);
    }

    public static Date localDateTimeToDate(LocalDateTime localDateTime, ZoneOffset zoneOffset) {
        OffsetDateTime offsetDateTime = localDateTime.atOffset(zoneOffset);
        return offsetDateTimeToDate(offsetDateTime);
    }

    public static Date offsetDateTimeToDate(OffsetDateTime offsetDateTime) {
        return Date.from(offsetDateTime.toInstant());
    }

    public static Date zoneDateTimeToDate(ZonedDateTime zonedDateTime) {
        return Date.from(zonedDateTime.toInstant());
    }

    public static void main(String[] args) {
        System.out.println("-- using ZoneOffset --");
        ZoneOffset zoneOffset = ZoneOffset.from(OffsetDateTime.now());
        System.out.println("ZoneOffset: " + zoneOffset);

        Date date = localTimeToDate(LocalTime.now(), 2000, 1, 1, zoneOffset);
        System.out.println(date);

        date = localDateToDate(LocalDate.now(), zoneOffset);
        System.out.println(date);

        date = localDateTimeToDate(LocalDateTime.now(), zoneOffset);
        System.out.println(date);

        date = offsetDateTimeToDate(OffsetDateTime.now());
        System.out.println(date);

        System.out.println("-- using ZoneId --");
        ZoneId zoneId = ZoneId.from(ZonedDateTime.now());
        System.out.println("ZoneId: " + zoneId);

        date = localTimeToDate(LocalTime.now(), 2000, 1, 1, zoneOffset);
        System.out.println(date);

        date = localDateToDate(LocalDate.now(), zoneOffset);
        System.out.println(date);

        date = localDateTimeToDate(LocalDateTime.now(), zoneOffset);
        System.out.println(date);

        date = zoneDateTimeToDate(ZonedDateTime.now());
        System.out.println(date);
    }
}
-- using ZoneOffset --
ZoneOffset: -05:00
Sat Jan 01 12:18:33 CST 2000
Mon Jun 11 00:00:00 CDT 2018
Mon Jun 11 13:18:33 CDT 2018
Mon Jun 11 13:18:33 CDT 2018
-- using ZoneId --
ZoneId: America/Chicago
Sat Jan 01 12:18:33 CST 2000
Mon Jun 11 00:00:00 CDT 2018
Mon Jun 11 13:18:33 CDT 2018
Mon Jun 11 13:18:33 CDT 2018

To convert java.util.Date to java.util.Calendar and vice-versa use following methods:

package com.logicbig.example;

import java.util.Calendar;
import java.util.Date;

public class DateToCalendar {

    public Calendar dateToCalendar(Date date) {
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        return c;
    }

    public static Date calendarToDate(Calendar calendar) {
        return calendar.getTime();
    }
}

See Also