Java解析日期

时间:2015-09-27 20:17:21

标签: java date parsing

这是我的约会对象。
Fri, 25 Sep 2015 12:01:16 +0000

输出应该如下所示 2015-09-25 12:01:16


这不起作用。

SimpleDateFormat sdf = new SimpleDateFormat("E, d M y H:m:s X");

我需要将它转换为mysql日期。

我有这个错误

Exception in thread "main" 
java.text.ParseException:Unparseable date: "25 Sep 2015 12:01:16"
at java.text.DateFormat.parse(DateFormat.java:366)
at Main.main(Main.java:27)

2 个答案:

答案 0 :(得分:6)

您的格式已关闭,您需要三个M(s)来获取缩减的月份名称(使用一个给出数字值)。像,

String str = "Fri, 25 Sep 2015 12:01:16 +0000";
SimpleDateFormat sdf = new SimpleDateFormat("E, d MMM y H:m:s X");
try {
    System.out.println(sdf.parse(str));
} catch (ParseException e) {
    e.printStackTrace();
}

我得到一个有效的Date。至于上面的调试,验证格式的快速而肮脏的方法就像

System.out.println(sdf.format(new Date())); // <-- check your format pattern

答案 1 :(得分:0)

假设确切的给定日期和时间字符串恰好是这种形式 -

WWW, DD MMM YYYY HH:MM:SS +NNNN

- 这应该有效:

public class Date2Date
{
  static String month(String s)
  {
    switch(s.substring(8,11).toLowerCase()){
      case "jan": return "01";
        // etc.
      case "sep": return "09";
        // etc.
      case "nov": return "11";
    }
    return "12";
  }
    public static void main (String args []) {

      String str ="Fri, 25 Dec 2015 12:01:16 +0000";
                 //0123456789012345678901234567890      

      System.out.println(str.substring(12,16) + "-" + month(str) + "-" + 
                         str.substring(5,7) + " " + str.substring(17,25));
    }
}

如果字段的长度不固定,请阅读indexOf和其他String函数。我认为必须对输入进行编辑才能使用SimpleDateFormat,但我可能错了。