java - 如何使用 DateTimeFormatter 获得一致性

标签 java datetimeformatter

当使用相同的 DateTimeFormatter 时,我发现相似的输入之间存在不一致。我需要这个来与日期时间的另一个输入源进行比较。

例如,给定这些输入:

2020-06-29T01:00:00+01:00 -> my date time formatter -> 2020-06-29T01:00:00+01:00
2021-08-18T21:00:00+0000 -> my date time formatter -> 2021-08-18T21:00:00Z

我希望输出始终采用 YYYY-mm-ddT00:00:00Z 格式,因此第二个输入会产生我想要的结果。

我目前格式化它的方式:

DateTimeFormatter FORMATTER = new DateTimeFormatterBuilder()
            .appendValue(ChronoField.YEAR, 4)
            .optionalStart()
            .appendLiteral("-")
            .optionalEnd()
            .appendValue(ChronoField.MONTH_OF_YEAR, 2)
            .optionalStart()
            .appendLiteral("-")
            .optionalEnd()
            .appendValue(ChronoField.DAY_OF_MONTH, 2)
            .appendLiteral('T')
            .appendPattern("HH':'mm':'ss[XXX][X]")
            .toFormatter();

public OffsetDateTime convert(String dateTime) {
  return OffsetDateTime.parse(dateTime, FORMATTER);
}

public String getDateTimeString(OffsetDateTime offsetDateTime) {
  return offsetDateTime.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME);
}

public void doStuff(String input) {
  OffsetDateTime odt = convert(input);
  String finalResult = getDateTimeString(odt);
}

..

doStuff(input);

我已经研究了几个小时了,但是文档对我来说不是那么清楚,我遇到了各种各样的麻烦。有什么建议吗?

最佳答案

OffsetDateTime 转换为 Instant 以去除时区。

public String getDateTimeString(Instant instant) {
  return instant.toString();
}

public void doStuff(String input) {
    OffsetDateTime odt = convert(input);
    String finalResult = getDateTimeString(odt.toInstant());
    System.out.println(finalResult);
}

关于java - 如何使用 DateTimeFormatter 获得一致性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68932788/

相关文章:

java - OffsetDateTime 格式化和解析

java - 如何将微调器值传递或获取到 android 中的字符串?

java - 为什么Java的java.time.format.DateTimeFormatter#format(LocalDateTime)要加一年?

java - 在Spring元素中添加css和js

java - 处理语言中屏幕设备的最大宽度和最大高度?

java - redis 中总是需要 protobuf 吗?

java - DateTimeFormatter.ISO_OFFSET_DATE_TIME 的等效格式字符串是什么?

java - 为什么使用 DateTimeFormatter 进行日期解析会根据 Java 版本给出不同的结果

java - 可能会减慢Java虚拟机的时间吗?

java - Accept-Language header 和 ResourceBundle 之间缺少功能