法语日期解析成功但英语失败
Date Parsing succeed in French but fails in English
考虑这个格式化当前日期的程序,并尝试再次解析它。它在法语中成功,但在英语中失败,我不明白为什么。
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
。
英文的默认格式是这样的:
SimpleDateFormat formatter = new SimpleDateFormat("MMM dd, yyyy HH:mm:ss a", Locale.ENGLISH);
您确定 dd MMM yyyy HH:mm:ss 是正确的英文格式吗?他们不像美国格式那样使用月前日期吗?
我怀疑你输入的格式字符串有误。
根据 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 小时时间格式,这可能很烦人。
考虑这个格式化当前日期的程序,并尝试再次解析它。它在法语中成功,但在英语中失败,我不明白为什么。
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
。
英文的默认格式是这样的:
SimpleDateFormat formatter = new SimpleDateFormat("MMM dd, yyyy HH:mm:ss a", Locale.ENGLISH);
您确定 dd MMM yyyy HH:mm:ss 是正确的英文格式吗?他们不像美国格式那样使用月前日期吗?
我怀疑你输入的格式字符串有误。
根据 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 小时时间格式,这可能很烦人。