考虑这个格式化当前日期的程序,并尝试再次解析它。它用法语成功,但用英语失败,我不明白为什么。
import java.util.Locale;
import java.text.DateFormat;
import java.time.Instant;
import java.util.Date;
import java.text.SimpleDateFormat;
public class HelloWorld{
public static void main(String []args){
try{
SimpleDateFormat formatter = new SimpleDateFormat("dd MMM yyyy HH:mm:ss", Locale.ENGLISH);
DateFormat.getDateTimeInstance(DateFormat.DEFAULT,DateFormat.DEFAULT, Locale.ENGLISH).parse(formatter.format(new Date()));
System.out.println("English - success");
}catch(Exception ex){
System.out.println(ex);
}
try{
SimpleDateFormat formatter = new SimpleDateFormat("dd MMM yyyy HH:mm:ss", Locale.FRENCH);
DateFormat.getDateTimeInstance(DateFormat.DEFAULT,DateFormat.DEFAULT, Locale.FRENCH).parse(formatter.format(new Date()));
System.out.println("French - success");
}catch(Exception ex){
System.out.println(ex);
}
System.out.println(Locale.getDefault());
}
}
输出:
java.text.ParseException: Unparseable date: "11 Feb 2015 11:09:26"
French -success
en_US
在告诉我应该使用模式或其他任何内容之前,请先查看http://docs.oracle.com/javase/7/docs/api/java/text/DateFormat.html#parse%28java.lang.String,%20java.text.ParsePosition%29。此方法用于解析没有模式的String
。
答案 0 :(得分:3)
我怀疑你的输入格式字符串是错误的。
根据documentation Jun 30, 2009 7:03:47 AM
,Default
设置上的en_US格式有效。
您可以先通过格式化给定的Date
来检查您的格式是否正确
例如
System.out.println(DateFormat.getDateTimeInstance(DateFormat.DEFAULT,DateFormat.DEFAULT, Locale.ENGLISH).format(new Date()));
提供的Feb 11, 2015 12:34:48 PM
不符合11 Feb 2015 11:09:26
。
这应该是en_US解析的正确格式化字符串:Feb 11, 2015 11:09:26 AM
。请记住,这是AM / PM 12小时时间格式,这可能很烦人。
答案 1 :(得分:0)
英语的默认格式如下:
SimpleDateFormat formatter = new SimpleDateFormat("MMM dd, yyyy HH:mm:ss a", Locale.ENGLISH);
答案 2 :(得分:0)
你确定dd MMM yyyy HH:mm:ss是一个正确的英文格式,他们不会像美国格式那样使用前几个月吗?