[英]Why am i getting the error “Unparseable date” from SimpleDateFormat?
[英]Why am I getting an unparseable date exception?
我無法使用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"
我該如何解決這個問題?
使用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)
我該如何解決這個問題?
將格式模式與輸入匹配。
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及更高版本中。 這些類取代了麻煩的舊遺留日期時間類,如java.util.Date
, Calendar
和SimpleDateFormat
。
現在處於維護模式的Joda-Time項目建議遷移到java.time類。
要了解更多信息,請參閱Oracle教程 。 並搜索Stack Overflow以獲取許多示例和解釋。 規范是JSR 310 。
您可以直接與數據庫交換java.time對象。 使用符合JDBC 4.2或更高版本的JDBC驅動程序 。 不需要字符串,不需要java.sql.*
類。
從哪里獲取java.time類?
ThreeTen-Extra項目使用其他類擴展了java.time。 該項目是未來可能添加到java.time的試驗場。 您可以在這里找到一些有用的類,比如Interval
, YearWeek
, YearQuarter
,和更多 。
日期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
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
public class Test {
public static void main(String[] args) {
String dateText = "18/07/2015 05:30";
DateFormat fechas = new SimpleDateFormat("dd/MM/yyyy hh:mm");
try {
Date parse = fechas.parse(dateText);
System.out.println("Date : " + fechas.format(parse));
} catch (ParseException ex) {
Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
我喜歡這個源代碼
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.