在 Java 中,我可以将日期和时间转换为不带时区的 ISO 8601 格式的字符串吗?

In Java, Can I Convert A Date and Time To An ISO 8601 formatted String Without A Timezone?

旧源系统的历史记录 table 有 2 个关于 date/time 的字段:日期(例如:12/20/2017)字符串和时间 (14:33:00) 字符串.我没有可以使用的时区信息。 UI 团队正在使用我正在创建的 Web 服务,该团队需要此信息作为 ISO 8601 格式的字符串。我正在使用 Java 8. 是否可以在没有时区的情况下创建从 return 到 UI 的 ISO 8601 格式字符串版本?

是的,你可以使用DateTimeFormatter ISO_LOCAL_DATE_TIME格式化没有时区:

String input = "12/20/2017 14:33:00";
DateTimeFormatter inputFormat = DateTimeFormatter.ofPattern("MM/dd/yyyy HH:mm:ss");
LocalDateTime date = LocalDateTime.parse(input, inputFormat);
String output = DateTimeFormatter.ISO_LOCAL_DATE_TIME.format(date);
System.out.println(output);

输出:

2017-12-20T14:33:00

是正确的。我会发现在代码中明确指出日期和时间来自不同的字段会更清晰:

    String dateString = "12/20/2017";
    String timeString = "14:33:00";

    DateTimeFormatter dateInputFormat = DateTimeFormatter.ofPattern("MM/dd/uuuu");
    String iso8601DateTimeString = LocalDate.parse(dateString, dateInputFormat)
            .atTime(LocalTime.parse(timeString))
            .toString();

这会生成符合 ISO 8601 标准的 2017-12-20T14:33

您可以使用 format(DateTimeFormatter.ISO_LOCAL_DATE_TIME) 而不是 toString()。有趣的是,它并不总是产生相同的结果:我们现在得到 2017-12-20T14:33:00,也就是说,即使秒数为 0,也会给出秒数。两个版本都符合 ISO 8601。