Java的Instant转换为LocalDateTime时末尾的零问题

4

我在使用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

如何确保不会删除尾随的零?

2
你是如何将本地日期时间对象转换为字符串的? - ernest_k
我使用Jackson将我的对象序列化和反序列化为JSON。 - Tror1935
1
为什么不修复正则表达式呢? - Holger
甚至更好的是,@Holger,不要使用正则表达式进行日期时间验证,而是解析并查看是否成功。例如,使用1个参数的LocalDateTime.parse - Ole V.V.
@OleV.V. 嗯,我不知道原始的正则表达式,“修复正则表达式”对于一个答案来说有点空泛。 - Holger
显示剩余4条评论
1个回答

7

格式化日期可以保留尾随零。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接