问题描述
我面临Java中DateFormat的奇怪行为。 我这样声明了一个DateFormat:
private static final DateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH");
但是我在这行有一个例外
Date date = DATE_FORMAT.parse(rawDate); rawDate = "2020-08-08 12"
Caused by: java.lang.NumberFormatException: For input string: ".241822E"
at java.base/jdk.internal.math.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2054) ~[na:na]
at java.base/jdk.internal.math.FloatingDecimal.parseDouble(FloatingDecimal.java:110) ~[na:na]
at java.base/java.lang.Double.parseDouble(Double.java:549) ~[na:na]
at java.base/java.text.DigitList.getDouble(DigitList.java:169) ~[na:na]
at java.base/java.text.DecimalFormat.parse(DecimalFormat.java:2198) ~[na:na]
at java.base/java.text.SimpleDateFormat.subParse(SimpleDateFormat.java:2241) ~[na:na]
at java.base/java.text.SimpleDateFormat.parse(SimpleDateFormat.java:1542) ~[na:na]
at java.base/java.text.DateFormat.parse(DateFormat.java:394) ~[na:na]
at com.livingobjects.collector.plugin.sfr.archipel.AstelliaDebit4GPlugin.handle(AstelliaDebit4GPlugin.java:109) ~[classes/:na]
... 7 common frames omitted
这根本没有任何意义...很棒的是,我可以尝试在调试器上执行同一行,并且可以运行:
解决方法
SimpleDateFormat不是线程安全的。因此,在几乎所有情况下,将其用作静态常量并不是一个好主意。每次需要时最好创建一个新实例。只要看看here