我没有使用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.