簡體   English   中英

無法刪除ParseException

[英]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新手。

java.time

    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

我不鼓勵使用SimpleDateFormatDateTimestamp 這些類的設計很差,而且已經過時了,尤其是第一個類非常麻煩。 相反,我使用的是java.time,即現代Java日期和時間API。

JDBC 4.2以上

如果您認為數據庫需要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存在兩個錯誤:

  1. 假設用戶輸入的小時是從00到23的一天中的小時,則需要大寫HH來解析它們,就像LppEdd在評論中說的那樣(小寫hh是從01到12的AM或PM中的小時,當然需要表示存在AM或PM標記)。
  2. 由於用戶輸入不包括秒的小數部分,因此格式格式中不應包含.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM