[英]Unable to remove ParseException
try{
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.SSS");
Date parsedDate = dateFormat.parse(tm);
timestamp = new java.sql.Timestamp(parsedDate.getTime());
}
catch (Exception pe) {
System.out.println("unexpected exception");
System.out.println(pe);
pe.printStackTrace();
}
控制台顯示“意外錯誤”(在我的catch塊中)。 我正在嘗試將客戶端輸入日期“ tm”轉換為時間戳。 tm的值類似於“ YYYY-MM-DD HH:MM:SS”(字符串)。 但是控制台始終顯示不可解析的日期。 我是Java新手。
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss");
String tm = "2019-02-09 07:35:54";
LocalDateTime dateTime = LocalDateTime.parse(tm, formatter);
System.out.println(dateTime);
這會產生以下輸出:
2019-02-09T07:35:54
我不鼓勵使用SimpleDateFormat
, Date
和Timestamp
。 這些類的設計很差,而且已經過時了,尤其是第一個類非常麻煩。 相反,我使用的是java.time,即現代Java日期和時間API。
如果您認為數據庫需要Timestamp
,則可能不需要。 假設您的JDBC驅動程序使用的是JDBC 4.2,則可以直接為其提供我們剛剛生成的LocalDateTime
對象。 例如:
PreparedStatement ps = yourConnection.prepareStatement(
"insert into your_table(your_timestamp_col) values (?);");
ps.setObject(1, dateTime);
格式模式字符串yyyy-MM-dd hh:mm:ss.SSS
存在兩個錯誤:
HH
來解析它們,就像LppEdd在評論中說的那樣(小寫hh
是從01到12的AM或PM中的小時,當然需要表示存在AM或PM標記)。 .SSS
(這可能是導致您異常的原因)。 Oracle教程:Date Time說明如何使用java.time。
也許您想嘗試一下
String tm = "2014-01-01 00:00:00";
String frontEndFormat = "yyyy-MM-dd HH:mm:ss";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(frontEndFormat);
LocalDateTime localDateTime = LocalDateTime.parse(tm, formatter);
Timestamp timestamp = Timestamp.valueOf(localDateTime);
//prints 2014-01-01 00:00:00.0
System.out.println(timestamp);
您會注意到大寫字母HH使用了數小時,小寫字母mm使用了數分鍾。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.