Java Instant到LocalDateTime尾随零

Java Instant到LocalDateTime尾随零,java,spring-boot,java-8,instant,Java,Spring Boot,Java 8,Instant,我使用Spring Boot在Java中将Instant转换为LocalDateTime,如下所示 LocalDateTime.ofInstant(timeInUtc, zoneId); 在我的测试中,我得到了一个正则表达式来检查我的资源是否返回带有LocalDateTime的Json。正则表达式需要以下格式的JSON值: 2018-11-15T08:38:49.382 但看起来尾随的零被删除了,这意味着 2018-11-15T08:38:49.380 我知道这符合正则表达式 2018

我使用Spring Boot在Java中将Instant转换为LocalDateTime,如下所示

LocalDateTime.ofInstant(timeInUtc, zoneId);
在我的测试中,我得到了一个正则表达式来检查我的资源是否返回带有LocalDateTime的Json。正则表达式需要以下格式的JSON值:

 2018-11-15T08:38:49.382
但看起来尾随的零被删除了,这意味着

2018-11-15T08:38:49.380
我知道这符合正则表达式

 2018-11-15T08:38:49.38
如何确保未删除尾随零


提前谢谢

格式化日期将有助于保留尾随的零

DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS")
输出如下所示:

2018-11-15T08:03:45.580

代码如下:

public class Post2 {

    public static void main(String[] args) {

        String date = LocalDateTime.ofInstant(Instant.now(), ZoneId.of("UTC"))
           .format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS"));
        System.out.println(date);

    }
}
编辑 添加正则表达式匹配以匹配有毫秒和无毫秒的日期时间

        String regex = "^\\d\\d\\d\\d-(0?[1-9]|1[0-2])-(0?[1-9]|[12][0-9]|3[01]) (00|[0-9]|1[0-9]|2[0-3]):([0-9]|[0-5][0-9]):([0-9]|[0-5][0-9])(\\.{0,1}[0-9]{1,3})$";

        String str1 = "2015-1-11 13:57:24";

        String str2 = "2015-1-11 13:57:24.0";
        String str3 = "2015-1-11 13:57:24.00";
        String str4 = "2015-1-11 13:57:24.000";
        String str5 = "2015-1-11 13:57:24.1";
        String str6 = "2015-1-11 13:57:24.12";
        String str7 = "2015-1-11 13:57:24.1222";
        String str8 = "2015-1-11 13:57:24.02";

        System.out.println( str1.matches(regex));
        System.out.println(str2.matches(regex));
        System.out.println(str3.matches(regex));
        System.out.println(str4.matches(regex));
        System.out.println(str5.matches(regex));
        System.out.println(str6.matches(regex));
        System.out.println(str7.matches(regex));
        System.out.println(str8.matches(regex));
输出:

true
true
true
true
true
true
false
true

如何将localdatetime对象转换为字符串?如何打印/格式化它?如果我运行
System.out.println(LocalDateTime.parse(“2018-11-15T08:38:49.380”)
我得到
2018-11-15T08:38:49.380(尾随零在那里)。我使用Jackson将我的对象序列化和反序列化为JSON。为了精确起见,尾随零没有被删除。
Instant
LocalDateTime
中都没有任何文本表示,但在调用
toString
时生成一个文本表示。在这种情况下不会生成尾随零。它们确实生成ISO 8601格式,这在大多数情况下都是可以的,因此请再次检查在您的情况下缺少零是否真的是一个问题。为什么不改为修复正则表达式?