Java kk 小时格式的 SimpleDateFormat 问题

Java SimpleDateFormat issue with kk hour formatting

我知道 kk 应该使小时数从 1 到 24 不等。但是,这种格式的日期变化似乎存在问题。

这是示例代码,它的输出是为了说明我的观点:

Long HOUR = 3600000L;

SimpleDateFormat kkFormat = new SimpleDateFormat("yyyy-MM-dd kk");
SimpleDateFormat HHFormat = new SimpleDateFormat("yyyy-MM-dd HH");

Date date = kkFormat.parse("2015-05-20 21");

for(int i=0; i<5; i++){
    System.out.println(kkFormat.format(new Date(date.getTime() + i * HOUR)));
    System.out.println(HHFormat.format(new Date(date.getTime() + i * HOUR)));
    System.out.println();
}

这会生成以下输出:

2015-05-20 21
2015-05-20 21

2015-05-20 22
2015-05-20 22

2015-05-20 23
2015-05-20 23

2015-05-21 24
2015-05-21 00

2015-05-21 01
2015-05-21 01

如果此日期未被格式化为“2015-05-20 24”,我看到的问题是“2015-05-21 24”。

感谢您的澄清。

编辑:作为对 Dan Getz 的回答,我正在尝试创建按如下方式迭代的文件名:

2015052023.txt

2015052024.txt

2015052101.txt

今天是哪一天,虽然取决于时区,但与小时的书写方式无关。所以如果日期是 21 号,那么日期就是 21 号,故事结束。将“12am”写成“00”或“24”与此无关。

也许您忘记了一个小时有 60 分钟?这不仅仅是午夜钟声敲响的第一刻,而是我们所说的整整一小时,这显然是下一个 24 小时制的一部分。

由于这种歧义,我个人绝不会在凌晨 12 点之后使用 24。也许您可以编辑您的问题,为什么要使用 24 小时作为这个时间?您的数据模型是否真正将时间戳精确到毫秒或类似时间?或者您希望存储和打印其他东西?