Этот фрагмент кода корректно работает в Windows, но в Linux бросает java.text.ParseException:java.text.ParseException: дата не поддается синтаксическому анализу: "1901-01-01 00:00:00"
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", new Locale("es", "ES"));
df.setLenient(false);
Date date = df.parse("1901-01-01 00:00:00");
System.out.println(date);
выхода для Windows:
Tue Jan 01 00:00:00 CET 1901
Linux выход:
Exception in thread "main" java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.simontuffs.onejar.Boot.run(Boot.java:340)
at com.simontuffs.onejar.Boot.main(Boot.java:166)
Caused by: java.text.ParseException: Unparseable date: "1901-01-01 00:00:00"
at java.text.DateFormat.parse(DateFormat.java:357)
...
Если ИЗВЛЕКИТЕ df.setLenient(false)
линии, выход Windows, является тем же самым, d исключение Linux исчезает, однако вывод Linux выглядит некорректным:
Tue Jan 01 00:14:44 CET 1901
Кто-нибудь знает, что происходит?
Благодаря
Конфигурация:
для Windows: Win7 + jdk1.7.0_71
Linux: Ubuntu + jdk1.7.0_60
EDIT: Как anolsi сказал проблема Daylight Saving. С датой «2015-03-29 02:00:01» исключение синтаксического разбора выбрано в Windows и Linux, потому что эта дата не существует в Мадриде (время было изменено с 2:00 до 3:00 в Мадриде тот день). Поэтому правильное поведение - это Linux. Windows JDK должен исключить исключение.
ли это Oracle или OpenJDK на Linux? Не стоит менять ситуацию, но на всякий случай. – Thomas
Не должно быть проблем. Прекрасно работает для меня. – Optional
Может быть проблема, которая была исправлена между u60 и u71. Попробуйте обновить JDK. – Thilo