ZonedDateTime 现在函数强制包含第二个值
ZonedDateTime now function mandatorily contains second value
我的代码需要字符串格式的当前 UTC 时间。
String date = ZonedDateTime.now(ZoneOffset.UTC).withNano(0).toString();
这在大多数情况下都可以正常工作,除非时间为零秒值。
Normal output: 2018-03-07T11:33:09Z
Problem output: 2018-03-06T11:33Z
第二次跳过打印。如何强制打印秒数,即使它们为零?
您可以使用格式化程序始终打印 seconds-part:
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ssX");
String s = ZonedDateTime.now(ZoneOffset.UTC).withNano(0).format(dtf);
System.out.println(s); // 2018-03-20T16:15:07Z
如果你像一样使用DateTimeFormatter
,你甚至不需要将纳米值设置为零:
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ssX");
String formatted = ZonedDateTime.now(ZoneOffset.UTC).format(fmt);
System.out.println(formatted); // 2018-03-08T13:33:52Z
那是因为格式化程序只打印格式中指定的字段。在本例中,它使用 HH:mm:ss
,这意味着 "hours:minutes:seconds"。由于秒的小数部分不在模式中,因此不会打印它们,因此无需调用 withNano
.
这听起来像是一个小细节,但由于所有这些 类 都是不可变的,像 withNano
这样的方法总是会创建一个新对象,在这种情况下你不需要,所以使用格式化程序不仅可以为您提供所需的输出,还可以避免创建不必要的对象(只有一个 ZonedDateTime
,这听起来可能无关紧要,但在格式化大量日期的情况下,这可能会有所不同, 国际海事组织).
只有当我真的想将此字段设置为零时,我才会调用 withNano(0)
。如果只是格式化的时候不想打印,我就不调用了
我的代码需要字符串格式的当前 UTC 时间。
String date = ZonedDateTime.now(ZoneOffset.UTC).withNano(0).toString();
这在大多数情况下都可以正常工作,除非时间为零秒值。
Normal output: 2018-03-07T11:33:09Z
Problem output: 2018-03-06T11:33Z
第二次跳过打印。如何强制打印秒数,即使它们为零?
您可以使用格式化程序始终打印 seconds-part:
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ssX");
String s = ZonedDateTime.now(ZoneOffset.UTC).withNano(0).format(dtf);
System.out.println(s); // 2018-03-20T16:15:07Z
如果你像DateTimeFormatter
,你甚至不需要将纳米值设置为零:
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ssX");
String formatted = ZonedDateTime.now(ZoneOffset.UTC).format(fmt);
System.out.println(formatted); // 2018-03-08T13:33:52Z
那是因为格式化程序只打印格式中指定的字段。在本例中,它使用 HH:mm:ss
,这意味着 "hours:minutes:seconds"。由于秒的小数部分不在模式中,因此不会打印它们,因此无需调用 withNano
.
这听起来像是一个小细节,但由于所有这些 类 都是不可变的,像 withNano
这样的方法总是会创建一个新对象,在这种情况下你不需要,所以使用格式化程序不仅可以为您提供所需的输出,还可以避免创建不必要的对象(只有一个 ZonedDateTime
,这听起来可能无关紧要,但在格式化大量日期的情况下,这可能会有所不同, 国际海事组织).
只有当我真的想将此字段设置为零时,我才会调用 withNano(0)
。如果只是格式化的时候不想打印,我就不调用了