java中如何将字符串格式转换为日期。
前提是:我不知道字符串是什么样子的,也就是说不是固定的日期格式。
(可能是'2009-9-9' 也可能是'2009-8-8 2:20:20'等)在这种情况下我如何才能把字符串准确的转换为日期格式。
用SimpleDateFormat我必须提前知道字符串是什么样式的才行。
请问我不知道的情况下应该如何做呢

解决方案 »

  1.   

    开始我在想 要不要用try/catch来做 后来发现这样做更加麻烦所以还是if/else来判断吧
      

  2.   


    import java.text.DateFormat;
    import java.text.ParseException;
    import java.util.Date;
    public class TestDateFormat { public static void main(String[] args) {

    DateFormat df = DateFormat.getDateInstance();
    try {
    Date dd = df.parse("2009-9-9");
    long t = dd.getTime();
    java.sql.Date d = new java.sql.Date(t);
    System.out.println(d);

    } catch (ParseException e) {
    e.printStackTrace();
    }
    }}
      

  3.   

    下面是我以前用c#写的一个函数,你可以参考一下,c#和java的语法还是比较类似的
    /// <summary>
            /// 将字符串转换成日期对象
            /// </summary>
            /// <param name="dateAndtime">日期字符串2009-12-12 12:12:12</param>
            /// <returns></returns>
            public static DateTime GetDateTime(string dateAndtime)
            {
                DateTime dt = DateTime.Now;
                try
                {
                    int month1 = dateAndtime.LastIndexOf("-") - dateAndtime.IndexOf("-") - 1;
                    int day1 = dateAndtime.IndexOf(" ") - dateAndtime.LastIndexOf("-") - 1;
                    int year = Int32.Parse(dateAndtime.Substring(0, 4));
                    int month = Int32.Parse(dateAndtime.Substring(5, month1));
                    int day = Int32.Parse(dateAndtime.Substring(month1 + 6, day1));
                    string temp = dateAndtime.Substring(dateAndtime.IndexOf(" ") + 1, dateAndtime.Length - dateAndtime.IndexOf(" ") - 1);
                    int hour = Int16.Parse(temp.Substring(0, temp.IndexOf(":")));
                    int minute = Int16.Parse(temp.Substring(temp.IndexOf(":") + 1, temp.LastIndexOf(":") - temp.IndexOf(":") - 1));
                    int second = Int16.Parse(temp.Substring(temp.LastIndexOf(":") + 1, temp.Length - temp.LastIndexOf(":") - 1));
                    dt = new DateTime(year, month, day, hour, minute, second);
                }
                catch (Exception ex)
                {
                    MessageBox.Show("日期格式有错误,请确认。");
                }
                return dt;
            }
      

  4.   

    如果确定是两个格式,你可以用一个try{}catch啊.如果用一个异常,就用另一个SimpleDateFormat去format嘛.如果确定格式控制得好,就判断一下是否有那个空格~~
      

  5.   

    changyuming方法 就很好啊也可以试着将不一样的格式化成相同的格式,也就是补0
    比如是 2009-10-30 和 2009-10-30 10:10:45
    可以将2009-10-30 变成 2009-10-30 00:00:00然后统一成 yyyy-MM-dd HH:mm:ss
      

  6.   

    用 SimpleDateFormat这个类就好了