Java 8 DateTimeFormatterBuilder appendValue零填充未按预期工作
我正在尝试将从offsetDate时间序列化为ISOString时的毫秒格式设置为3位数 价值 预期 实际的 2020-06-16T05:47:40.1-06:00 2020-06-16T11:47:40.001Z 2020-06-16T11:47:40.100Z 2020-06-16T05:47:40.12-06:00 020-06-16T11:47:40.012Z 020-06-16T11:47:40.120ZJava 8 DateTimeFormatterBuilder appendValue零填充未按预期工作,date,java-8,dateformatter,Date,Java 8,Dateformatter,我正在尝试将从offsetDate时间序列化为ISOString时的毫秒格式设置为3位数 价值 预期 实际的 2020-06-16T05:47:40.1-06:00 2020-06-16T11:47:40.001Z 2020-06-16T11:47:40.100Z 2020-06-16T05:47:40.12-06:00 020-06-16T11:47:40.012Z 020-06-16T11:47:40.120Z 2020-06-16T05:47:40.1-06:00中的.1表示,即.1秒,因
2020-06-16T05:47:40.1-06:00中的.1
表示,即.1
秒,因此也可以写成.100
秒。以毫秒计,它将是.1*1000
=100
毫秒
除此之外,您还可以通过使用大大简化代码,如下所示:
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
为什么您希望0.1秒(100毫秒)表示为0.001秒(1毫秒)?2020-06-16T05:47:40.1-06:00。还有40秒,分数上有1。我们的一些代码使用@JsonFormat(“yyyy-MM-dd'T'HH:MM:ss:SSSXXX”)jackson注释,该注释将转换为001ms。我正在尝试将许多格式统一到millis输出。那么哪一个是正确的呢?我是否应该考虑40.1秒而不是40秒1毫秒?我理解它的分数,我应该改变我的期望。谢谢。虽然用简单模式SSS的JSONGRADE认为Java8中的毫秒级时间PACKEGES SSS是分数的,但相信代码> > ToString()/Case>不会给出第二个部分恰好为0的角情况下所需的字符串。那么米利斯就不在了。考虑一个<代码> DateTimeFormatter < /C> >由三个小数组成的一个模式,包括<代码> SSS。谢谢,@ OLEV.V。谢谢你的宝贵建议。仅针对未来的访问者:即使第二个是0
(例如2020-06-16T05:47-06:00
),也可能发生这种情况,因为java.time.time#toString
已经实现。我已更新代码以返回格式化的OffsetDateTime
字符串。