比如我现在有两个字符串 String input1="2014-05-23 09:23:33";
String input2="2014-05-23 上午09:23:33";该如何把他们转为Date类型,
用 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");只能转 input1 .如何写一个方法尽可能多的匹配多的样式或有什么方法可以实现吗?

解决方案 »

  1.   

    传二个参数就可以,写一个工具类了,如:public static Date toDateSafely(String simpleType,String stringDate){
    try{
    SimpleDateFormat dateFormat = new SimpleDateFormat(simpleType); 
        return dateFormat.parse(stringDate); 
    }catch(Exception e){
    return null;
    }
    }
      

  2.   

    en ,是的,但是你每次调用这个方法的时候必须知道stringDate是什么形式的时间字符串才能相应的改掉simpleType.我想的就是偷懒点,我不用去关心传进来stringDate是什么样子,能给我转时间类型就好
      

  3.   


    /**
     * String 转 Date
     * auther: shijing
     * 2014-5-9下午03:16:14
     * @param str
     * @param format
     * @return
     */
    public static Date string2Date(String str, String format) {
    DateFormat dateFormat = new SimpleDateFormat(format);
    Date date = null;
    try {
    date = dateFormat.parse(str);
    }
    catch (ParseException e) {
    e.printStackTrace();
    }
    return date;
    }这就是我现在经常写的DateUtils的其中一个方法
      

  4.   

    尽可能穷举
    不停地try catch去尝试,成功了就return,失败了就继续parse。
      

  5.   


    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;public class Test3 {
    public static Date parseDate(String time) {
    String pattern = "";
    if (time.contains("-")) {
    pattern += "yyyy-MM-dd";
    } else if (time.contains("年")) {
    pattern += "yyyy年MM月dd日";
    }
    if (time.contains("上午") || time.contains("下午")) {
    if (!pattern.equals("")) {
    pattern += " ";
    }
    pattern += "a";
    }
    if (time.contains(":")) {
    if (!pattern.equals("")) {
    pattern += " ";
    }
    pattern += "HH:mm:ss";
    }
    try {
    return new SimpleDateFormat(pattern).parse(time);
    } catch (ParseException e) {
    e.printStackTrace();
    return null;
    }
    } public static void main(String[] args) {
    System.out.println(parseDate("2014-05-26 下午 16:22:13"));
    System.out.println(parseDate("2014-05-26"));
    System.out.println(parseDate("16:22:13"));
    System.out.println(parseDate("2014-05-26 16:22:13"));
    System.out.println(parseDate("2014年05月26日 16:22:13"));
    }
    }基本常用的没问题