Stanko Stanko - 2 months ago 10
Java Question

How to convert Date to LocalTime?

I'm trying to convert a

Date
to a
LocalTime
(I only want the hours and minutes of the date) but it's not working out. I first looked here date-to-java-time and try to convert a
Date
to
LocalTime
but that didn't work so I tried to convert
Date
to
Calendar
and then convert
Calendar
to
Date
but that also didn't work.

I think it is because
date
stores the time in
fasttime
instead of
cdate
. But that's just a gut feeling. Here's my code:

//create the date
String strTime ="2011-02-18 05:00:00.0";
Date date = format.parse(strTime);

//convert to calendar
Calendar cal = Calendar.getInstance();
cal.setTime(date);

//convert the date to a local time
Instant instant = Instant.ofEpochMilli(cal.getTimeInMillis());
LocalTime convert = LocalDateTime.ofInstant(instant, ZoneId.systemDefault()).toLocalTime();


I don't get a compile error but the
LocalTime
his hours aren't set and stay
0
.

Answer

Your input is effectively a LocalDateTime. It would be much simpler to simply parse that to a LocalDateTime and then get the LocalTime from that. No time zones to worry about, no somewhat-legacy classes (avoid Date and Calendar where possible...)

import java.time.*;
import java.time.format.*;
import java.util.*;

public class Test {

    public static void main(String[] args) {
        DateTimeFormatter formatter =
            DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.S", Locale.US);

        String text = "2011-02-18 05:00:00.0";
        LocalDateTime localDateTime = LocalDateTime.parse(text, formatter);
        LocalTime localTime = localDateTime.toLocalTime();
        System.out.println(localTime);
    }
}