法语日期解析成功但英语失败

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 小时时间格式,这可能很烦人。