Ironluca Ironluca - 1 month ago 8
Java Question

Java8 java.util.Date conversion to java.time.ZonedDateTime

I am getting the following exception while trying to convert

java.util.Date
to
java.time.LocalDate
.

java.time.DateTimeException: Unable to obtain ZonedDateTime from TemporalAccessor: 2014-08-19T05:28:16.768Z of type java.time.Instant


The code is as follow:

public static Date getNearestQuarterStartDate(Date calculateFromDate){

int[] quaterStartMonths={1,4,7,10};
Date startDate=null;

ZonedDateTime d=ZonedDateTime.from(calculateFromDate.toInstant());
int frmDateMonth=d.getMonth().getValue();


Is there something wrong in the way I am using the
ZonedDateTime
class?

As per documentation, this should convert a
java.util.Date
object to
ZonedDateTime
. The date format above is standard Date?

Do I have to fallback on Joda time?

If someone could provide some suggestion, it would be great.

Answer

To transform an Instant to a ZonedDateTime, ZonedDateTime offers the method ZonedDateTime.ofInstant(Instant, ZoneId). So

So, assuming you want a ZonedDateTime in the default timezone, your code should be

ZonedDateTime d = ZonedDateTime.ofInstant(calculateFromDate.toInstant(),
                                          ZoneId.systemDefault());