【问题标题】:How to convert dd/MM/yyyy HH:mm:ss to offsetdatetime - java如何将 dd/MM/yyyy HH:mm:ss 转换为 offsetdatetime - java
【发布时间】:2020-06-18 12:23:50
【问题描述】:

我升级到:

DateTimeFormatter dtf = DateTimeFormatter.ofPattern ("dd/MM/yyyy HH:mm:ss");
org.threeten.bp.LocalDateTime _date = org.threeten.bp.LocalDateTime.parse ("10/19/2020 18:00:47", dtf);

并得到: 2020-10-19T18:00:47 但我仍然没有标准的出口:2020-10-19T18:00:47.868-03:00

【问题讨论】:

  • 您的输入字符串不是dd/MM/yyyy HH:mm:ss 格式。里面没有时间。那里也没有时区偏移。所以你只有一个LocalDate

标签: java datetimeoffset localdate


【解决方案1】:

user3197884 之前接受的答案是正确且内容丰富的 (+1)。我觉得它没有完全回答所问的问题,所以我想将转换贡献为org.threeten.bp.OffsetDateTime

    DateTimeFormatter dtf = DateTimeFormatter.ofPattern ("MM/dd/yyyy HH:mm:ss");
    OffsetDateTime date = LocalDateTime.parse("10/19/2020 18:00:47", dtf)
            .atZone(ZoneId.of("America/Argentina/Buenos_Aires"))
            .toOffsetDateTime();
    System.out.println(date);

输出是你要求的:

2020-10-19T18:00:47-03:00

由于您的字符串中没有偏移量或时区,我们需要以其他方式提供偏移量。我不敢说在您的特定情况下到底哪种方法是最好的方法,但是一种非常常见的好方法是提供为字符串假定的时区。我刚选了一个,请插入您自己的时区。

我没有在字符串中交换1019,而是在格式模式中交换了ddMM。显然两者都有效。

【讨论】:

    【解决方案2】:

    您的 DateTimeFormatter 具有 ("dd/MM/yyyy HH:mm:ss") 但您使用了 "10/19/2020 18:00:47"。 月份不能是 19。

    将您的输入更改为“19/10/2020 18:00:47”,它应该可以工作。

    org.threeten.bp.format.DateTimeFormatter dtf = org.threeten.bp.format.DateTimeFormatter.ofPattern ("dd/MM/yyyy HH:mm:ss");
    org.threeten.bp.LocalDateTime _date = org.threeten.bp.LocalDateTime.parse("19/10/2020 18:00:47", dtf);
    System.out.println(_date);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-16
      相关资源
      最近更新 更多