Localdate.format,未应用格式
Localdate.format, format is not applied
我的 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 driver 会处理剩下的事情。如果使用 JPA,您的 JPA 实现也会处理它。
如果您的列是 char 类型(例如 varchar(10)
)并且您无法更改它,请不要为它发明您自己的格式。以 ISO 8601 格式存储日期。 LocalDate.toString()
产生这种格式。
String formattedDate = purchaseDate.toString();
System.out.println(formattedDate);
在我的例子中输出是:
2017-11-29
顺便说一句,为了向用户展示,您也不应该发明自己的格式。而是依赖 Java 中的 built-in 格式。例如:
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
two-digit 个月,您可以使用大写 MM
。
- 您需要从
format
方法返回的 String
中选取格式。 LocalDate
是不可变的,因此不受方法调用的影响。它也不能有格式。这只是日历中的一个日期。
链接
我不得不为我的日期选择器使用字符串转换器。
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 个日期选择器。
我的 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 driver 会处理剩下的事情。如果使用 JPA,您的 JPA 实现也会处理它。
如果您的列是 char 类型(例如 varchar(10)
)并且您无法更改它,请不要为它发明您自己的格式。以 ISO 8601 格式存储日期。 LocalDate.toString()
产生这种格式。
String formattedDate = purchaseDate.toString();
System.out.println(formattedDate);
在我的例子中输出是:
2017-11-29
顺便说一句,为了向用户展示,您也不应该发明自己的格式。而是依赖 Java 中的 built-in 格式。例如:
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
two-digit 个月,您可以使用大写 MM
。
- 您需要从
format
方法返回的String
中选取格式。LocalDate
是不可变的,因此不受方法调用的影响。它也不能有格式。这只是日历中的一个日期。
链接
我不得不为我的日期选择器使用字符串转换器。
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 个日期选择器。