作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的 FXML 中有一个 DatePicker,我需要日期将其插入到我的 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。我正在努力改进。
最佳答案
不要格式化日期以便插入到 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);
输出:
29.11.2017
有两处错误:
mm
。这意味着小时的分钟,并且由于 LocalDate
中没有一天中的时间,它抛出了您看到的异常。您收到的消息非常准确:Unsupported field: MinuteOfHour
相反,您可以使用大写字母 MM
表示两位数的月份。
format
方法返回的 String
中选择格式。 LocalDate
是不可变的,因此不受方法调用的影响。它也不能有格式。这只是日历中的一个日期。关于java - Localdate.format,格式不适用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50462041/
我是一名优秀的程序员,十分优秀!