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

时间:2015-02-11 11:19:47

标签: java parsing date datetime

考虑这个格式化当前日期的程序,并尝试再次解析它。它用法语成功,但用英语失败,我不明白为什么。

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

3 个答案:

答案 0 :(得分:3)

我怀疑你的输入格式字符串是错误的。

根据documentation Jun 30, 2009 7:03:47 AMDefault设置上的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是一个正确的英文格式,他们不会像美国格式那样使用前几个月吗?