日期格式化异常不可解析日期

时间:2014-01-16 23:32:24

标签: java

我正在尝试使用SimpleDateFormat格式化我的应用程序用户输入的日期,但我总是收到错误:

 01/28/2014java.text.ParseException: Unparseable date: "01/28/2014"

我用来格式化日期的代码如下:

    Date rDate, dDate;
    String Date1 = request.getParameter("Date1");       
    String Date2 = request.getParameter("Date2");

    //Here the date get display for example as 01/29/2014 (i.e. MM/DD/YYYY)
    System.out.println("Date1::   "+ Date1);
    System.out.println("Date2::   "+ Date2);

    SimpleDateFormat parseRDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    SimpleDateFormat parseDDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    try {
        //#########Crashes in the next two lines#########...
        rDate = (Date)parseRDate.parse(Date1);
        dDate = (Date)parseDDate.parse(Date2);

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

有人可以通过告诉我这里的错误来帮助我吗?

感谢您的时间

3 个答案:

答案 0 :(得分:2)

您需要将DateFormat模式与输入String

相匹配
SimpleDateFormat parseRDate = new SimpleDateFormat("MM/dd/yyyy");
  

我知道如何将格式从MM / dd / YYYY转换为yyyy-MM-dd HH:mm:ss?

您需要做的就是使用单独的SimpleDateFormat实例进行格式化

SimpleDateFormat output = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(output.format(date1));

答案 1 :(得分:1)

正如您所说,Date1的格式为MM/dd/yyyy ...但您尝试解析格式为yyyy-MM-dd HH:mm:ss。< / p>

您解析为SimpleDateFormat构造函数的模式必须与数据本身的格式相匹配。 (你认为你在构造函数中指定了什么?)

请注意,您提供的代码根本没有执行格式化 - 只需解析。

您还应该计算出您感兴趣的时区以及Locale。就个人而言,我认为明确指定这两者是更清楚的 - 即使你想要系统默认的那些。

(如果你正在做大量的日期/时间工作,你还应该考虑使用Joda Time,这是一个更愉快的日期/时间API。我还会考虑更有用的异常处理,并遵循Java命名约定......)

答案 2 :(得分:1)

您在构造函数中指定格式yyyy-MM-dd HH:mm:ss,然后接受完全不同的格式(MM/dd/yyyy)作为输入。您需要使实际格式与预期格式匹配。

检查以下内容(进行比较):

Date rDate, dDate;
SimpleDateFormat parseRDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat parseDDate = new SimpleDateFormat("MM/dd/yyyy");
try {
    rDate = (Date)parseRDate.parse("2014-01-28 12:22:22");
    dDate = (Date)parseDDate.parse("01/28/2014");
} catch (ParseException e) {
    e.printStackTrace();
}

传递给构造函数的字符串告诉SimpleDateFormat如何读取稍后给出的输入。