javadatelocaltime

LocalTime from Date


I'm trying to convert a Date instance to a LocalTime instance.

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

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

// Convert Calendar to LocalTime
Instant instant = Instant.ofEpochMilli(cal.getTimeInMillis());
LocalTime convert = LocalDateTime.ofInstant(instant, ZoneId.systemDefault()).toLocalTime();

I don't get a compiler error but the LocalTime instance values are wrong.

I think it does not work because Date stores time in fasttime instead of cdate.

I'm using JDK version 1.8.


Solution

  • 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);
        }
    }