java - 如果字符串包含 000,OffsetDateTime 不会显示毫秒

标签 java date-formatting java-time datetimeoffset

我有一个字符串“2020-03-25T22:00:00.000Z”,我想将其转换为 OffsetDateTime。 下面是我尝试过的代码,但是当我将毫秒作为 000 传递时,它不会反射(reflect)在 OffsetDateTime 中。

OffsetDateTime offsetDateTime=OffsetDateTime.parse("2020-03-25T22:00:01.123Z", 
DateTimeFormatter.ISO_OFFSET_DATE_TIME);
print(offsetDateTime)
//Output: 2020-03-25T22:00:01.123Z

但是当mili为000时

OffsetDateTime offsetDateTime=OffsetDateTime.parse("2020-03-25T22:00:01.000Z", 
DateTimeFormatter.ISO_OFFSET_DATE_TIME);
print(offsetDateTime)

//Output: 2020-03-25T22:01Z (mili second is missing)

我也尝试了自定义格式化程序,但它的行为相同

OffsetDateTime.parse("2020-03-25T22:00:00.123Z",
           DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSX"));

谁能帮帮我

最佳答案

您必须记住,用于解析 ISO 字符串的格式可能与用于将日期时间对象转换回字符串的格式不同。

当您像这样打印偏移日期时间时:

System.out.println(odt);

然后将调用 OffsetDateTime.toString() 方法,并且从其文档中可以看出:

Outputs this date-time as a String, such as 2007-12-03T10:15:30+01:00. The output will be one of the following ISO-8601 formats:

  • uuuu-MM-dd'T'HH:mmXXXXX
  • uuuu-MM-dd'T'HH:mm:ssXXXXX
  • uuuu-MM-dd'T'HH:mm:ss.SSSXXXXX
  • uuuu-MM-dd'T'HH:mm:ss.SSSSSSXXXXX
  • uuuu-MM-dd'T'HH:mm:ss.SSSSSSSSSXXXXX

The format used will be the shortest that outputs the full value of the time where the omitted parts are implied to be zero.

再次请记住,java.time 包中的任何类都没有格式,所有这些类都包含一些代表毫秒或天的long 字段等等

我可能无法强调这一点,但这就是处理日期和时间时的本质:java.time没有有格式,你需要将它们转换为适当的格式。

因此,如果您始终希望获得完整值,则只需在打印之前将 OffsetDateTime 格式化为 String 即可。

// best is to store that in a static variable
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSX");

// parse using our custom formatter
OffsetDateTime odt = OffsetDateTime.parse("2020-03-25T22:00:00.000Z", dtf);

// print using our custom formatter
String formatted = odt.format(dtf);
System.out.println(formatted);

哪些输出:

2020-03-25T22:00:00.000Z

关于java - 如果字符串包含 000,OffsetDateTime 不会显示毫秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62890384/

相关文章:

java - ZonedDateTime 返回某个日期到另一个结束日期的错误月数

java - 知道从 arrayList 中 get() 哪个对象

java - 在 jira 中获取问题时出现异常

java - 如何从依赖 war 中排除jar,仅用于在pom中运行测试

java - 如何以数字格式获取当前日期和时区

perl - 如何以给定的格式显示当前日期时间,包括 Perl 中的微秒?

json - Spring 网页 : @RequestBody Json conversion for Java8 LocalTime not working

java - MockHttpServletResponse 返回 Pageable 端点的空主体

excel - 如何让数据透视表列字段的成员按自然顺序而不是按字母顺序显示?

java - java.Clock 中的混淆,systemDefaultZone() 返回 UTC 时间