2013-01-16 128 views
0

我试图将“Mon Jan 14 00:00:00 GMT-12:00 2013”​​类型的日期转换为java.sql.Date yyyy/MM/dd类型,我写了下面的代码。试图执行下面的代码,我得到“unparseable日期”错误..请帮助我解决以下问题。Java中的日期转换错误

 DateFormat df = new SimpleDateFormat("yyyy/MM/dd"); 
    try{ 
       java.sql.Date xdate=new java.sql.Date(df.parse("Mon Jan 14 00:00:00 GMT-12:00 2013").getTime()); 
System.out.println(xdate.toString()); 

      }catch(Exception x) 
      { 
       System.out.println(x.getMessage()); 
      } 

回答

1

您使用

new SimpleDateFormat("yyyy/MM/dd") 

所以yyyy/MM/dd试图解析日期格式Mon Jan 14 00:00:00 GMT-12:00 2013 打开你特林解析到yyyy/MM/dd形式的日期字符串,它会被解析。

1

那么,您提供的日期不符合您提供的格式。你有一个ISO字符串作为参数,但你的格式化程序需要“yyyy/MM/dd”。你为什么期望这个工作?

1

您需要以下简单的日期格式

DateFormat df = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy"); 

更多的日期和时间模式:Simple Date Format

+0

您不需要3个z。只需要一个。用'z'替换'zzz'。 –

+0

@RohitJain是的,我从java.util.Date.toString方法引用。 – vels4j

3

由于从其他的答案,你使用了错误的方式来解析你的日期字符串得到。

实际上,您需要该模式,但要将Date对象转换为所需的模式。但首先,您需要获取给定日期字符串的Date对象。为此,您需要构建与您的字符串完全匹配的模式。

有在日期格式两个方面: -

  • 解析 - 日期字符串Date对象
  • 格式化 - 格式化Date对象的日期字符串

所以,你首先需要使用DateFormat#parse(),然后使用DateFormat#format(),具有不同的模式。

所以,这里是你需要的代码: -

String fromDate = "Mon Jan 14 00:00:00 GMT-12:00 2013"; 
Date date = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy").parse(fromDate); 

java.sql.Date toDate = new java.sql.Date(date.getTime()); 

System.out.println(new SimpleDateFormat("yyyy/MM/dd").format(toDate)); 
+0

详细解答。 – vels4j

0

尝试

DateFormat df = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyyy", Locale.US); 

如果您当地的语言不是英语,需要Locale.US和你要分析MonJan。日期解析器可能对语言敏感,就像我们的情况一样