Java 8 无法使用Joda Time API转换UTC日期

Java 8 无法使用Joda Time API转换UTC日期,java-8,jodatime,reactive-mongo-java,Java 8,Jodatime,Reactive Mongo Java,我正在尝试将此日期转换为本地日期 Input: "2021-04-20T15:00:00+02:00"; Expected output: "2021-04-20T13:00:00Z"; Actual output : "2021-04-20T15:00:00 你能告诉我该用哪个图书馆吗 代码: 您可以使用java-8解析输入字符串,因为它在ISO-8601中,然后使用 tl;博士 您使用了错误的类型LocalDateTime。使用Offs

我正在尝试将此日期转换为本地日期

Input: "2021-04-20T15:00:00+02:00";

Expected output: "2021-04-20T13:00:00Z";

Actual output : "2021-04-20T15:00:00
你能告诉我该用哪个图书馆吗

代码:

您可以使用java-8解析输入字符串,因为它在ISO-8601中,然后使用

tl;博士 您使用了错误的类型LocalDateTime。使用OffsetDateTime和Instant

细节 Joda时间库在几年前由JSR 310中定义的java.Time类继承并构建到java 8及更高版本中之后,现在处于维护模式

您的输入有一个与UTC的偏移量为+02:00的指示器,比UTC早两个小时。因此,将其解析为java.time.OffsetDateTime对象

只需提取一个瞬间即可调整到UTC

生成所需的输出

String output = instant.toString() ;

正如答案所说,Joda的官方时间建议是切换到java.Time,但在亚洲/卡塔尔时区运行时,使用Joda Time DateTime.parsedate.withZoneDateTimeZone.getDefault会产生2021-04-20T16:00:00.000+03:00。那是当地时间吗?是什么让你期待2021-04-20T13:00:00Z?哪个库:你是指Joda Time库DateTime、LocalDateTIme、Instant中的哪个库类,还是指哪个库而不是Joda Time java.Time/JSR-310、Time4J?后一个问题可能与堆栈溢出无关;前者是关于主题的。
String timeStamp = "2021-04-20T15:00:00+02:00";
OffsetDateTime.parse(timeStamp).toInstant() //2021-04-20T13:00:00Z
OffsetDateTime
.parse( "2021-04-20T15:00:00+02:00" )
.toInstant()
.toString()
OffsetDateTime odt = OffsetDateTime.parse( "2021-04-20T15:00:00+02:00" ) ;
Instant instant = odt.toInstant() ;
String output = instant.toString() ;