今天在做 Rss parser 的时候遇到的棘手问题,java中有什么通用的方法能把不同格式表示的日期字符串正确转换成Date类型,譬如:
"Sun Dec 04 00:30:55 CST 2005"
"Sun,04 Dec 2005 00:30:55"
"Mon, 18 Apr 2005 10:25:40 +0200"
"2005-12-04"
"2005-12-4 0:30:55"
.........

解决方案 »

  1.   

    好像自有把date型的转化为你所说的各种字符串,没有把字符串转换成date的
      

  2.   

    楼上的不对啊,字符串转date也可以
    通用的方法没听说过,需要每种格式定义一个DateFormat的吧
      

  3.   

    查看下
    org.apache.commons.lang.time
    的有关的资料。
    或者用简单的SimpleDateFormat。
      

  4.   

    谢谢各位,有关的资料全都查过,simpleDateFormat定义的格式只能转换与其对应的字符串,不符合格式的一样会抛出异常。
      

  5.   

    谢谢楼上的兄弟,不过DateFormat.parse()也只能转换一种特定的格式
      

  6.   

    public static Date fromDateString(String dateString, String fromFormat)
        {
            GregorianCalendar gc = new GregorianCalendar();
            SimpleDateFormat df = new SimpleDateFormat(fromFormat);
            df.setTimeZone(gc.getTimeZone());
            df.setLenient(false);
            Date date = df.parse(dateString, new ParsePosition(0));
            return date;
        }
      

  7.   

    上面的可以把"yyyy-mm-dd hh:mm:ss"转成Date型
    "Sun Dec 04 00:30:55 CST 2005"
    "Sun,04 Dec 2005 00:30:55"
    "Mon, 18 Apr 2005 10:25:40 +0200"
    这些不行了。
      

  8.   

    可以声明一组各自格式的 SimpleDateFormat,然后使用循环来 parse,那一个没有抛出异常就说明这个一个OK。想不出其他办法。
      

  9.   

    String str = "Sun Dec 04 00:30:55 CST 2005";
    SimpleDateFormat df = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.ENGLISH);
    System.out.println(df.parse(str)); str = "Sun, 04 Dec 2005 00:30:55";
    df = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss", Locale.ENGLISH);
    System.out.println(df.parse(str)); str = "Mon, 18 Apr 2005 10:25:40 +0200";
    df = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss Z", Locale.ENGLISH);
    System.out.println(df.parse(str)); str = "2005-12-04";
    df = new SimpleDateFormat("yyyy-MM-dd");
    System.out.println(df.parse(str)); str = "2005-12-4 0:30:55";
    df = new SimpleDateFormat("yyyy-MM-dd H:mm:ss");
    System.out.println(df.parse(str));
      

  10.   

    看来只能写死了,郁闷,个人认为Java中日期相关的类设计得还不够优雅,没有提供一套灵活且高效的转换机制
    谢谢楼上各位兄弟,结贴啦