我正在尝试使用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();
}
有人可以通过告诉我这里的错误来帮助我吗?
感谢您的时间
答案 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
如何读取稍后给出的输入。