Vin*_*ins 1 java javafx date datepicker fxml
我的 FXML 中有一个 DatePicker,我需要将它插入到我的 SQL 数据库中的日期。我想格式化我的日期,但它不起作用。
LocalDate localDate = purchased_at.getValue();
localDate.format(DateTimeFormatter.ofPattern("dd.mm.yyyy"));
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误。
Caused by: java.time.temporal.UnsupportedTemporalTypeException: Unsupported field: MinuteOfHour
Run Code Online (Sandbox Code Playgroud)
我还是个初学者。在过去的 3 或 4 个月里,我使用了 Java。我正在努力改进。
不要格式化您的日期以插入到您的 SQL 数据库中。假设您的数据库列具有数据类型,date并且您至少使用 Java 8 和至少 JDBC 4.2,只需按原样传递LocalDate给您PreparedStatement:
PreparedStatement insertStmt = myConnection.prepareStatement(
"insert into my_table(purchase_date) values (?)");
insertStmt.setObject(1, purchaseDate);
Run Code Online (Sandbox Code Playgroud)
您的 JDBC 驱动程序将负责其余的工作。如果使用 JPA,您的 JPA 实现也会处理它。
如果您的列具有 char 类型(例如varchar(10))并且您无法更改它,请不要为它发明自己的格式。以 ISO 8601 格式存储日期。LocalDate.toString()产生这种格式。
String formattedDate = purchaseDate.toString();
System.out.println(formattedDate);
Run Code Online (Sandbox Code Playgroud)
在我的情况下,输出是:
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);
Run Code Online (Sandbox Code Playgroud)
输出:
29.11.2017
有两点不对:
mm。这意味着一分钟,因为 aLocalDate没有一天中的时间,所以它抛出了你看到的异常。您收到的消息非常准确:不支持的字段:MinuteOfHour
相反,您可以使用大写字母MM表示两位数的月份。
String从format方法返回的格式中获取格式。该LocalDate是不可改变的,因此不影响该方法调用。它也不能有格式。这只是日历中的一个日期。| 归档时间: |
|
| 查看次数: |
3162 次 |
| 最近记录: |