BirtDateTime.addDay returns 新年前夜错了年份
BirtDateTime.addDay returns wrong year around new years eve
我有一个带有两个参数的 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-01-01,addDay 函数生成的日期有错误的年份。我的第一个猜测是它必须与日历周做一些事情(因为新的一周从 2019-12-30 开始,但是在 1 月 2 日一切又好了...
如果我将 BirtDateTime.today() 替换为固定字符串 "2019-12-31"
或类似字符串,我可以重现此内容。如果我使用另一年,比如说 2018 年,只有 2019-01-01 会 return 错误的日期(2019-31-12 而不是 2018-12-31)。
有什么我没见过或没有人遇到过这种行为吗?如果重要的话,我正在使用 birt 2019-03。
我们遇到了完全相同的问题。
作为数字(BirtDateTime.diffDay(BirtDateTime.today(), BirtDateTime.addDay(BirtDateTime.today(), -10))) 是正确的 (-10) 问题出在别处。
使用 'yyyy' 而不是 'YYYY' 解决了这个问题。
参见 yyyy vs YYYY。
YYYY
指定使用星期年份。使用 should 而不是使用 yyyy
来简单地使用实际日期的年份。
正如您在 BirtDateTime.java
源代码中看到的那样,SimpleDateFormat
用于格式化。
SimpleDateFormat
的 Javadoc 说
Letter | Date or Time Component
y | Year
Y | Week year
我有一个带有两个参数的 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-01-01,addDay 函数生成的日期有错误的年份。我的第一个猜测是它必须与日历周做一些事情(因为新的一周从 2019-12-30 开始,但是在 1 月 2 日一切又好了...
如果我将 BirtDateTime.today() 替换为固定字符串 "2019-12-31"
或类似字符串,我可以重现此内容。如果我使用另一年,比如说 2018 年,只有 2019-01-01 会 return 错误的日期(2019-31-12 而不是 2018-12-31)。
有什么我没见过或没有人遇到过这种行为吗?如果重要的话,我正在使用 birt 2019-03。
我们遇到了完全相同的问题。
作为数字(BirtDateTime.diffDay(BirtDateTime.today(), BirtDateTime.addDay(BirtDateTime.today(), -10))) 是正确的 (-10) 问题出在别处。
使用 'yyyy' 而不是 'YYYY' 解决了这个问题。 参见 yyyy vs YYYY。
YYYY
指定使用星期年份。使用 should 而不是使用 yyyy
来简单地使用实际日期的年份。
正如您在 BirtDateTime.java
源代码中看到的那样,SimpleDateFormat
用于格式化。
SimpleDateFormat
的 Javadoc 说
Letter | Date or Time Component
y | Year
Y | Week year