在 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。
旧源系统的历史记录 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。