如果日期是 12 月 31 日,Vaadin Grid 显示错误的年份

Vaadin Grid shows wrong year if date is the 31th of December

我创建了一个 vaadin 网格并将 setItems 方法与 returns 分页流的自定义 jpa 存储库结合使用。当网格必须显示具有特定日期(2019-12-31)的日期时出现问题,它会自动显示“31.12.2020”,看起来日期不知何故跳到了下一年。

这里是网格

private Grid<Budget> createGrid() {
        Grid<Budget> grid = new Grid<>(Budget.class, false);
        grid.setPageSize(100);
        grid.setSortableColumns();        
        grid.addColumn(new LocalDateRenderer<>(Budget::getValidfrom, "dd.MM.YYYY")).setHeader("Gültig von");
        grid.addColumn(new LocalDateRenderer<>(Budget::getValidto, "dd.MM.YYYY")).setHeader("Gültig bis");
        for (Grid.Column<Budget> c : grid.getColumns()) {
            c.setAutoWidth(true).setFlexGrow(2);
        }
        return grid;
}

这是我如何填充网格

grid.setItems(query -> service.getLimitData(filter, query.getPage(), query.getPageSize()).stream());

数据库中的数据集

vaadin 网格中的数据集

tl;博士

YYYY 更改为 uuuu 以更正格式模式。

您的问题与 Vaadin 具体无关。日期格式是标准的 Java.

Week-based 年与日历年

您的格式代码不正确。

大写 YYYY 表示 week-based 年 ,而不是日历年。该代码使用 ISO 8601 definition of weeks 和 week-based 年份:周从星期一开始,运行整整 7 天,第一周包含日历年的第一个星期四。这意味着 week-based 年的第一周和最后几周可能比 previous/next 日历年有几天。

所以你遇到的意外年份是一个特性,而不是一个错误。

对于 calendar-year,使用小写 yyyyuuuu.

这些格式化模式代码记录在 Java文档中 DateTimeFormatter class。