eri*_*k p 2 java simpledateformat
我有以下方法:
public static Date convertFromWowInterface(String wowinterfaceFormat){
Date date = null;
try {
SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd-yy hh:mm a");
date = dateFormat.parse(wowinterfaceFormat);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
Run Code Online (Sandbox Code Playgroud)
传递的字符串格式为:
"08-11-19 07:00 AM"
Run Code Online (Sandbox Code Playgroud)
显然没有引号。现在,上述方法在我的Mac上可以正常工作,但是当我的某些用户使用该程序(在Windows上)时,他们会收到异常:
java.text.ParseException: Unparseable date: "08-11-19 07:00 AM"
at java.base/java.text.DateFormat.parse(DateFormat.java:395)
Run Code Online (Sandbox Code Playgroud)
操作系统是否在这里有所作为?还是还有其他东西在玩?据我所知,SimpleDateFormat与输入字符串完全匹配?
当我切换到其他语言环境时,我可以重现该问题。
这是我的演示程序:
import java.util.*;
import java.text.*;
public class YourCode {
public static void main(String[] args) throws Exception {
for (String a : args) {
SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd-yy hh:mm a");
Date d = dateFormat.parse(a);
System.out.println(d);
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我在美国英语语言环境下运行它时,它可以工作:
import java.util.*;
import java.text.*;
public class YourCode {
public static void main(String[] args) throws Exception {
for (String a : args) {
SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd-yy hh:mm a");
Date d = dateFormat.parse(a);
System.out.println(d);
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我切换到例如德国语言环境时,会看到一个例外,它使用24小时制,而不是AM / PM。
robert@saaz:~$ LC_ALL="en_US.UTF-8" java YourCode "08-11-19 07:00 AM"
Sun Aug 11 07:00:00 CDT 2019
Run Code Online (Sandbox Code Playgroud)
要解决此问题,请在创建时指定语言环境SimpleDateFormat。更改
SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd-yy hh:mm a");
Run Code Online (Sandbox Code Playgroud)
至
SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd-yy hh:mm a", Locale.US);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
62 次 |
| 最近记录: |