parse用法 - localdatetime to string java 8




Localdate.format,格式未應用 (2)

不要格式化插入SQL數據庫的日期。 假設您的數據庫列具有數據類型 date 並且您至少使用Java 8且至少使用JDBC 4.2,只需將 LocalDate 傳遞給 PreparedStatement

    PreparedStatement insertStmt = myConnection.prepareStatement(
            "insert into my_table(purchase_date) values (?)");
    insertStmt.setObject(1, purchaseDate);

您的JDBC驅動程序將負責其餘的工作。 如果使用JPA,您的JPA實現也會處​​理它。

如果您的列具有char類型(例如 varchar(10) )並且您無法更改它,請不要為其創建自己的格式。 將日期存儲為ISO 8601格式。 LocalDate.toString() 生成此格式。

    String formattedDate = purchaseDate.toString();
    System.out.println(formattedDate);

在我的情況下輸出是:

2017年11月29日

另外,為了向用戶演示,您也不應該發明自己的格式。 而是依賴於Java中的內置格式。 例如:

    Locale turkish = Locale.forLanguageTag("tr");
    DateTimeFormatter dateFormatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT)
            .withLocale(turkish);
    String formattedDate = purchaseDate.format(dateFormatter);
    System.out.println(formattedDate);

輸出:

2017年11月29日

您的代碼出了什麼問題?

有兩件事是錯的:

  1. 你使用小寫 mm 。 這意味著分鐘,因為 LocalDate 沒有一天中的時間,它拋出了你看到的異常。 你得到的信息非常精確:

    不支持的字段:MinuteOfHour

    相反,您可以使用大寫 MM 表示兩位數的月份。

  2. 您需要獲取 format 方法返回的 StringformatLocalDate 是不可變的,因此不受方法調用的影響。 它也不能有格式。 這只是日曆中的日期。

鏈接: 維基百科文章:ISO 8601

我的FXML中有一個DatePicker,我需要Date將它插入到我的SQL數據庫中。 我想格式化我的日期,但它不起作用。

    LocalDate localDate = purchased_at.getValue();
    localDate.format(DateTimeFormatter.ofPattern("dd.mm.yyyy"));

這是我得到的錯誤。

Caused by: java.time.temporal.UnsupportedTemporalTypeException: Unsupported field: MinuteOfHour

我還是個初學者。 我過去3或4個月就有Java了。 我正在努力改進。


我不得不為我的Datepicker使用String轉換器。

    public String changeformat(DatePicker date) {

    date.setConverter(new StringConverter<LocalDate>() {
        String pattern = "MM.yyyy";
        DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern(pattern);

        {
            date.setPromptText(pattern.toLowerCase());
        }

        @Override
        public String toString(LocalDate date) {
            if (date != null) {
                return dateFormatter.format(date);
            } else {
                return "";
            }
        }

        @Override
        public LocalDate fromString(String string) {
            if (string != null && !string.isEmpty()) {
                return LocalDate.parse(string, dateFormatter);
            } else {
                return null;
            }
        }
    });
    return null;
}

它工作得非常好。 我不得不使用參數,因為我目前正在使用5個Datepickers。





fxml