Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 8 DateTimeFormatterBuilder appendValue零填充未按预期工作_Date_Java 8_Dateformatter - Fatal编程技术网

Java 8 DateTimeFormatterBuilder appendValue零填充未按预期工作

Java 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秒,因

我正在尝试将从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
秒,因此也可以写成
.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
字符串。