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 小时作为这个时间?您的数据模型是否真正将时间戳精确到毫秒或类似时间?或者您希望存储和打印其他东西?
我知道 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 小时作为这个时间?您的数据模型是否真正将时间戳精确到毫秒或类似时间?或者您希望存储和打印其他东西?