我正在尝试为可选时间部分创建日期时间格式,目前我实现了这个
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(使用前将#替换为@)