【发布时间】:2020-01-06 08:44:23
【问题描述】:
我有一个带有两个参数的 birt 报告,startDate 和 endDate(它们都是文本字段/字符串)。它们预填充了昨天和昨天 + '23:59:59',因此格式类似于 2019-12-20 和 2019-12-20 23:59:59。
这个函数分别是Formatter.format(BirtDateTime.addDay(BirtDateTime.today(), -1), "YYYY-MM-dd")和Formatter.format(BirtDateTime.addDay(BirtDateTime.today(), -1), "YYYY-MM-dd 23:59:59")。
这在今年年底之前都可以正常工作。生成的日期如下所示:
| BirtDateTime.today() | Generated date |
| -------------------- | -------------- |
| 2019-12-29 | 2019-12-28 |
| 2019-12-30 | 2020-12-29 |
| 2019-12-31 | 2020-12-30 |
| 2020-01-01 | 2020-12-31 |
| 2019-01-02 | 2020-01-01 |
如您所见,从 2019 年 12 月 30 日到 2020 年 1 月 1 日,addDay 函数生成的日期有错误的年份。我的第一个猜测是它必须与日历周有关(因为新的一周从 2019 年 12 月 30 日开始,但在 1 月 2 日,一切又恢复正常了......
如果我将 BirtDateTime.today() 替换为固定字符串 "2019-12-31" 或类似字符串,我可以重现此问题。如果我再使用一年,比如 2018 年,只有 2019-01-01 会返回错误的日期(2019-31-12 而不是 2018-12-31)。
有什么我没有见过或遇到过这种行为的东西吗?如果重要的话,我正在使用 birt 2019-03。
【问题讨论】: