当前位置: 首页 > 知识库问答 >
问题:

Localdate。格式,未应用格式

易宣
2023-03-14

我的FXML中有一个DatePicker,我需要Date将其插入我的SQL数据库。我想格式化我的Date,但它不起作用。

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

这就是我得到的错误。

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

我还是个初学者。在过去的3到4个月里,我一直使用Java。我正在尽力提高。

共有2个答案

广亮
2023-03-14

我不得不为我的日期选择器使用字符串转换器。

    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个日期选择器。

公冶元青
2023-03-14

不要格式化插入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格式存储日期<代码>本地日期。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

有两件事错了:

  1. 您使用了小写的mm。这意味着一分钟一小时,因为LocalDate中没有一天的时间,所以它抛出了您看到的异常。你得到的信息非常准确:

不支持的字段:分钟小时

相反,您可以使用大写字母MM表示两位数的月份。

  • 维基百科文章:ISO 8601
  • 插入
 类似资料:
  • 但这无济于事。有什么想法吗?

  • 问题内容: 对于java.util.Date当我做 然后在发送JSON请求时 有用。 我应如何针对Java 8的LocalDate字段执行此操作? 我尝试过 没用 有人可以让我知道这样做的正确方法是什么。 以下是依赖项 问题答案: 我从来没有能够使用注释使它简单地工作。为了使其正常工作,我创建了一个,然后添加了(:现在改为),以及另外一个警告,那就是需要将设置为。有关更多信息,请参见模块的文档。这

  • 为了寻求LocalDate方面的帮助,我提出了以下建议: 我需要将其作为字符串返回,但格式为:dd/mm/yyyy=29/04/1991。 我怎样才能做到这一点?

  • 对于java.util.Date

  • 我用Java定义了以下格式: 我的应用程序从日历中获取特定日期: 我想以的格式存储另外两个日期。给定的的和。 例如,如果是我想创建以下两个变量- 我该怎么做?

  • 我是漏掉了什么,还是一个虫子?