无法使用 Joda Time API 将日期转换为 UTC [关闭]
Posted
技术标签:
【中文标题】无法使用 Joda Time API 将日期转换为 UTC [关闭]【英文标题】:Unable to convert date with UTC using Joda Time API [closed] 【发布时间】:2021-07-19 04:58:37 【问题描述】:我正在尝试将此日期转换为本地日期
Input: "2021-04-20T15:00:00+02:00";
Expected output: "2021-04-20T13:00:00Z";
Actual output : "2021-04-20T15:00:00
您能告诉我要使用哪个库吗?
代码:
String date = "2021-04-20T15:00:00+02:00";
DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ssZ");
LocalDateTime dt = LocalDateTime.parse(date, formatter);
System.out.println(dt.toString());
【问题讨论】:
虽然官方的 Joda-Time 建议是切换到 java.time 作为答案,但在亚洲/卡塔尔时区运行时,使用 Joda-TimeDateTime.parse(date).withZone(DateTimeZone.getDefault())
会产生 2021-04-20T16:00:00.000+03:00
。那是你当地时间吗?是什么让您期待2021-04-20T13:00:00Z
?
which library:你是指 Joda-Time 库中的哪个库类(DateTime
、LocalDateTIme
、Instant
)还是哪个库而不是 Joda-时间(java.time/JSR-310,Time4J)?后一个问题对于 Stack Overflow 来说是题外话。前者是主题。
【参考方案1】:
您可以使用java-8
OffsetDateTime解析输入字符串(因为它在ISO-8601
中)然后使用toInstant
String timeStamp = "2021-04-20T15:00:00+02:00";
OffsetDateTime.parse(timeStamp).toInstant() //2021-04-20T13:00:00Z
【讨论】:
【参考方案2】:tl;博士
您使用了错误的类型,LocalDateTime
。使用OffsetDateTime
和Instant
。
OffsetDateTime
.parse( "2021-04-20T15:00:00+02:00" )
.toInstant()
.toString()
详情
Joda-Time 库在多年前被 JSR 310 中定义的 java.time 类取代并内置于 Java 8 及更高版本之后,现在处于维护模式。
您的输入显示与 UTC 的偏移量为 +02:00
,比 UTC 早两个小时。所以解析为java.time.OffsetDateTime
对象。
OffsetDateTime odt = OffsetDateTime.parse( "2021-04-20T15:00:00+02:00" ) ;
仅提取 Instant
即可调整为 UTC。
Instant instant = odt.toInstant() ;
生成你想要的输出。
String output = instant.toString() ;
【讨论】:
以上是关于无法使用 Joda Time API 将日期转换为 UTC [关闭]的主要内容,如果未能解决你的问题,请参考以下文章