Java 8 DateTimeFormatterBuilder appendValue zeroPPadding未按预期



我正试图在从offsetDate-Time 序列化到ISOString时将毫秒格式化为3位

预期值实际值/thead>020-06-16T1 1:47:40.120Z
2020-06-16T05:17:40.1-06:00 20200-06-16T11:47:0.001Z 2020-06-16T1:47:0.100Z
2020-06-16T05:17:40.12-06:00 020-06-16T11:47:40.012Z

2020-06-16T05:47:40.1-06:00中的.1表示秒的分数,即.1秒,因此也可以写成.100秒。以毫秒为单位,它将是.1 * 1000=100毫秒。

除此之外,使用OffsetDateTime#withOffsetSameInstant可以极大地简化代码,如下所示:

import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
public class Main {
public static void main(String[] args) {
// Test
System.out.println(parseOdtStrAndConvertWithOffsetSameInstant("2020-06-16T05:47:40.1-06:00"));
System.out.println(parseOdtStrAndConvertWithOffsetSameInstant("2020-06-16T05:47:40.12-06:00"));
}
static String parseOdtStrAndConvertWithOffsetSameInstant(String text) {
OffsetDateTime odt = OffsetDateTime.parse(text).withOffsetSameInstant(ZoneOffset.UTC);
return odt.format(DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss.SSSX"));
}
}

输出:

2020-06-16T11:47:40.100Z
2020-06-16T11:47:40.120Z

相关内容

  • 没有找到相关文章

最新更新