Java8 java.util.Date 转换为 java.time.ZonedDateTime

2022-08-31 10:27:38

我在尝试转换为 时遇到以下异常。java.util.Datejava.time.LocalDate

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

代码如下:

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();

我使用该类的方式是否有问题?ZonedDateTime

根据文档,这应该将对象转换为 。上面的日期格式是标准日期?java.util.DateZonedDateTime

我必须回退Joda时间吗?

如果有人可以提供一些建议,那就太好了。


答案 1

要将 a 转换为 ,提供了 ZonedDateTime.ofInstant(Instant, ZoneId) 的方法。所以InstantZonedDateTimeZonedDateTime

因此,假设您想要默认时区中的 a,则代码应该是ZonedDateTime

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

答案 2

要从日期获取 ZonedDateTime,您可以使用:

calculateFromDate.toInstant().atZone(ZoneId.systemDefault())

然后,如果需要 LocalDate,可以调用该方法。另请参阅:将 java.util.Date 转换为 java.time.LocalDatetoLocalDate