【问题标题】:Unable to convert date with UTC using Joda Time API [closed]无法使用 Joda Time API 将日期转换为 UTC [关闭]
【发布时间】: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-Time DateTime.parse(date).withZone(DateTimeZone.getDefault()) 会产生 2021-04-20T16:00:00.000+03:00。那是你当地时间吗?是什么让您期待2021-04-20T13:00:00Z
  • which library:你是指 Joda-Time 库中的哪个库类(DateTimeLocalDateTImeInstant)还是哪个库而不是 Joda-时间(java.time/JSR-310,Time4J)?后一个问题对于 Stack Overflow 来说是题外话。前者是主题。

标签: java-8 jodatime reactive-mongo-java


【解决方案1】:

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

String timeStamp = "2021-04-20T15:00:00+02:00";
OffsetDateTime.parse(timeStamp).toInstant() //2021-04-20T13:00:00Z

【讨论】:

    【解决方案2】:

    tl;博士

    您使用了错误的类型,LocalDateTime。使用OffsetDateTimeInstant

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-21
      • 1970-01-01
      • 2019-12-30
      • 2020-06-24
      • 2013-08-18
      • 2011-09-09
      • 2013-10-22
      • 1970-01-01
      相关资源
      最近更新 更多