我没有使用Java 8,因此没有使用新的Date API来实现兼容性。我在当前项目中需要使用JJWT来实现REST Service的安全性,并且找到了最简单的代码示例项目以供使用(https://github.com/agoncal/agoncal-sample-jaxrs/tree/master/04-JWT)。不幸的是,它似乎使用了Java 8,并且我需要使用Java 7,因此不得不使用Date API的org.threeten back port。下面的代码是我需要转换的最后一部分,但是对于如何使其与org.threeten端口一起使用感到困惑。

import org.threeten.bp.LocalDateTime;
import org.threeten.bp.ZoneId;

toDate(LocalDateTime.now().plusMinutes(15L));

private Date toDate(LocalDateTime localDateTime) {
    org.threeten.bp.OffsetDateTime.now();
    localDateTime.atZone(ZoneId.systemDefault()).toInstant();
    return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
}

最佳答案

DateTimeUtils

如果您的问题是在使用ThreeTen-Backport时如何在可怕的旧类java.util.Date和现代Instant类之间进行转换,则答案是DateTimeUtils类。

java.util.Date d = DateTimeUtils.toDate( instant ) ;


和另一个方向。

Instant instant = DateTimeUtils.toInstant( myJavaUtilDate ) ;


LocalDateTime

顺便说一句,LocalDateTime是在此处使用的错误类。跟踪时刻时,切勿使用该类。缺少任何时区或UTC偏移量的概念,该类不能表示一个时刻。

跟踪时刻需要您将日期和日期放在时区(或偏移量)的上下文中。因此,您必须使用以下之一:


Instant
OffsetDateTime
ZonedDateTime


堆栈溢出已经对此进行了很多次讨论。搜索以了解更多信息。

DateTimeUtils
.toDate(
    ZonedDateTime
    .now(
        ZoneId.of( "Pacific/Auckland" )
    )
    .plusMinutes( 15 )
    .toInstant()
) // Returns a `java.util.Date` object.

10-08 15:29