Đoạn mã này hoạt động chính xác trong Windows, nhưng trong Linux ném một java.text.ParseException:java.text.ParseException: Unparseable date: "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);
của Windows đầu ra:
Tue Jan 01 00:00:00 CET 1901
Linux đầu ra:
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)
...
Nếu loại bỏ dòng df.setLenient(false)
, sản lượng Windows là như nhau, một d ngoại lệ Linux biến mất, tuy nhiên đầu ra Linux có vẻ không đúng:
Tue Jan 01 00:14:44 CET 1901
Có ai biết điều gì đang xảy ra không?
Cảm ơn
Cấu hình:
Windows: Win7 + jdk1.7.0_71
Linux: Ubuntu + jdk1.7.0_60
EDIT: Như anolsi nói là một vấn đề tiết kiệm ánh sáng. Với ngày "2015-03-29 02:00:01" ngoại lệ phân tích cú pháp được ném, trong Windows và Linux, bởi vì ngày này không tồn tại ở Madrid (thời gian đã được thay đổi từ 2:00 sáng đến 3:00 sáng tại Madrid ngày hôm đó). Vì vậy, hành vi đúng là Linux. Windows JDK nên ném ngoại lệ.
Có Oracle hoặc OpenJDK trên Linux? Không nên tạo sự khác biệt nhưng chỉ trong trường hợp. – Thomas
Không phải là vấn đề. Làm việc tốt cho tôi. – Optional
Có thể là sự cố đã được sửa giữa u60 và u71. Thử cập nhật JDK. – Thilo