我无法使用SimpleDateFormat
解析日期。我试过这段代码:
SimpleDateFormat fechas = new SimpleDateFormat("dd/MM/yyyy hh:mm");
if (data[i].length() > 1) {
Date f = (Date) fechas.parse(data[i]);
System.out.println(i + " " + f);
}
我收到以下错误:
Exception in thread "main" java.text.ParseException: Unparseable date: "01/06/2015 8:20
“
我使用以下代码再次遇到同样的问题:
SimpleDateFormat fech = new SimpleDateFormat(" yyyy/MM/dd HH:mm:ss");
Date date = (Date) fech.parse(data[i]);
System.out.println(date);
哪个给出了错误
Exception in thread "main" java.text.ParseException: Unparseable date: "00015/06/01 08:20:15"
如何解决此问题?
答案 0 :(得分:2)
使用SimpleDateFormat
时,日期格式必须与完全匹配相匹配。在您的示例中,您包括日期,但在日期格式中,您还指定了小时和分钟。如果您的数据有该文本,它将起作用。例如,使用您的第一个示例:
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
public class DateDemo {
public static void main(String args[]) throws Exception {
String yourData = "01/06/2015";
String matchingData = "01/06/2015 13:00";
SimpleDateFormat fechas = new SimpleDateFormat("dd/MM/yyyy hh:mm");
Date matchingDate = fechas.parse(matchingData);
System.out.println("String: \"" + matchingData + "\" parses to " + matchingDate);
Date yourDate = fechas.parse(yourData);
System.out.println("String: \"" + yourData + "\" parses to " + yourDate);
}
}
输出:
String: "01/06/2015 13:00" parses to Mon Jun 01 13:00:00 CDT 2015
Exception in thread "main" java.text.ParseException: Unparseable date: "01/06/2015"
at java.text.DateFormat.parse(DateFormat.java:366)
at Demo.main(Demo.java:14)
答案 1 :(得分:1)
如何解决此问题?
将格式设置与输入匹配。
LocalDateTime.parse(
"01/06/2015 8:20" ,
DateTimeFormatter.ofPattern( "dd/MM/uuuu H:m" )
)
.toString()
2015-06-01T08:20
正如其他人所述,您的格式化模式无法与您的字符串输入匹配。
此外,您使用的是 java.time 类在几年前取代的麻烦的旧日期时间类。
您的时间小时缺少填充零。因此,您应该使用一个h
而不是两个hh
。此外,小写h
表示12小时制,由于缺少AM / PM指示,您的输入似乎是24小时制。因此,大写H
是有序的。
String input = "01/06/2015 8:20" ; // Notice the lack of a padding zero on the hour.
DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd/MM/uuuu H:m" ) ;
LocalDateTime ldt = LocalDateTime.parse( input , f ) ;
ldt.toString():2015-06-01T08:20
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和& SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
您可以直接与数据库交换 java.time 对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*
类。
从哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。
答案 2 :(得分:0)
您的约会日期String
以及SimpleDateFormat()
中的模式应符合: -
SimpleDateFormat("dd/MM/yyyy hh:mm")
将与01/06/2015 2:24
和
SimpleDateFormat("yyyy/MM/dd HH:mm:ss")
将与2015/06/01 08:20:15
有关完整列表,请参阅官方Oracle Doc here
答案 3 :(得分:0)
na.rm
我就像源代码那样做