4
SimpleDateFormat sdf1 = new SimpleDateFormat(yyyy-MM-dd kk:mm:ss);
SimpleDateFormat sdf2 = new SimpleDateFormat(yyyy-MM-dd HH:mm:ss);
Calendar cal = Calendar.getInstance();
Date d = cal.getTime();
System.out.println("Current Time is:"+d);
System.out.println("Time value using kk:" + sdf1.format(d));
System.out.println("Time Value using HH:" + sdf2.format(d));

Result:
Current Time is: Wed Sep 25 00:55:20 IST 2013
Time value using kk : 2013-09-25 24:55:20
Time value using HH : 2013-09-25 00:55:20

在使用 kk 和 HH 时,谁能说出为什么这种行为会随着时间的推移而改变。

并且 kk 给出了 24:55:20,这在任何地方都有用吗?据我所知,时间范围只有 00:00:00 到 23:59:59。

有没有超出这个范围,如果有,“kk”在哪里有用?

4

5 回答 5

3

JavaDocs ...

k - 一天中的小时 (1-24)
H - 一天中的小时 (0-23)

更新

至于为什么需要/支持这...有很多原因,其中一些可能是...

  • 为外部系统提供支持。这使得解析来自各种来源的日期/时间字符串成为可能,为 API 提供了适应开发人员需求的灵活性。
  • 我不了解你,但我的闹钟在 1-24 (1-12) 小时模式下工作;)

我建议这样做的目的是尝试并满足 API 可能遇到/需要的尽可能多的可能格式,而不是试图限制开发人员或要求我们必须编写自己的 API。

我不了解你,但我还有很多其他事情需要做;)

于 2013-09-25T06:24:52.413 回答
3

这记录在SimpleDateFormat文档中:

H 一天中的小时 (0-23)
k 一天中的小时 (1-24)
K 上午/下午的小时 (0-11)
h 上午/下午的小时 (1-12)

因此,您有 4 种不同的小时格式。我想添加kh是一个错误。它们真的没有任何意义,而且几乎从不需要。

用于H24 小时格式和K12 小时格式。

于 2013-09-25T06:25:19.433 回答
1

没有理由应该有错误。记录k为以下字段:SimpleDateFormat

一天中的小时 (1-24)

这就解释了为什么午夜得到 24 而不是 00。如果您不想要介于 01 和 24 之间的值,请不要kk在格式字符串中使用!我不记得上次我想使用这样的东西是什么时候了,但大概在某些情况下会使用它(特别是对于总是“整点”的值,所以你得到的是 24:00 而不是 00:00)。

始终查阅文档以了解格式字符串的含义。

于 2013-09-25T06:25:29.153 回答
1

[Kian Fatt, Ting] 哥们,不同的是如果你使用大写H is zero to 23 (0-23)字母,但如果你使用小写字母k is one to 24 (1-24)。唯一的区别是,两者在显示时间上都是正确的。您可以查看我在下面提供的 java 文档链接。

来源:SimpleDateFormat

于 2013-09-25T06:32:32.923 回答
0

如果你不能使用日期和日历……这门课很容易出错。

jodatime 这是一个更好的解决方案

于 2013-09-25T06:40:42.310 回答