Java 8 可选时间部分不起作用

2023-12-25

我正在尝试为可选时间部分创建日期时间格式,目前我实现了这个

import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import java.text.ParseException;

/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
    public static void main (String[] args) throws java.lang.Exception
    {
        System.out.println(Ideone.getDate("2017-07-01T00:00:00.0Z"));
        System.out.println(Ideone.getDate("2017-07-01T00:00:00.00Z"));
        System.out.println(Ideone.getDate("2017-07-01T00:00:00.000Z"));
    }
    
    public static LocalDateTime getDate(String date) {
        try {
           
            DateTimeFormatter formatter2 =
                DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss[.SSS]'Z'");
            LocalDateTime ldt = LocalDateTime.parse(date, formatter2);
            
            
            return ldt;
           
        } catch (DateTimeParseException ex) {
            return null;
        }
    }
}

并且有输出

null

2017-07-01T00:00

2017-07-01T00:00

现在我的问题是,为什么 1 次分数的日期不起作用,而 2 次和 3 次分数的日期却起作用?它应该接受 1,2 和 3 分数吗?还是只有3个分数?

提前致谢


这似乎是一个错误。 Java 8 中日期时间解析的毫秒部分似乎普遍存在错误,请参阅这个问题 https://bugs.openjdk.java.net/browse/JDK-8031085及其副本。

相关报价:

然而更糟糕的是 SSS 模式最终使用了 当宽松模式合适时使用严格模式。就目前而言 代表, DateTimeFormatter.ofPattern("hhmmss.SSS") 需要三个 毫秒的数字,原本需要 0 到 9(宽大的行为)。

鉴于当前的实现要求 SSS 为三位数字,因此相邻值解析不适用是非常令人惊讶的。

但您似乎发现了上述要求也不适用的情况。此外,即使上述问题处于“已修复”状态,您的示例似乎也存在问题bothjava 8 和 java 9:

>java -version
java version "9"
Java(TM) SE Runtime Environment (build 9+181)
Java HotSpot(TM) 64-Bit Server VM (build 9+181, mixed mode)

>javac Ideone.java

>java Ideone
null
2017-07-01T00:00
2017-07-01T00:00

>"c:\Program Files\Java\jdk1.8.0\bin"\javac Ideone.java

>"c:\Program Files\Java\jdk1.8.0\bin"\java Ideone
null
2017-07-01T00:00
2017-07-01T00:00

它应该接受 1,2 和 3 分数吗?还是只有3个分数?

根据引用,它应该只有 3,尽管最初是 0-9。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 8 可选时间部分不起作用 的相关文章

随机推荐