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”会有用吗?
答案 0 :(得分:3)
来自JavaDocs ...
k - 白天的小时(1-24)
H - 白天小时(0-23)
<强>更新强>
至于为什么需要/支持这个......有很多原因,有些可能是......
我建议的目的是尝试满足API可能遇到/要求的许多可能格式,而不试图限制开发人员或要求我们必须编写自己的API。
我不了解你,但我还有许多其他需要做的事情;)
答案 1 :(得分:3)
SimpleDateFormat
文档中记录了这一点:
H
一天中的小时(0-23)
k
一天中的小时(1-24)
K
上午/下午(0-11)小时
h
上午/下午(1-12)小时
因此,您有4种不同的格式。我想添加k
和h
是个错误。他们真的没有任何意义,几乎从不需要。
使用H
表示24小时格式,K
表示12小时格式。
答案 2 :(得分:1)
没有理由应该是一个错误。 k
是documentedin SimpleDateFormat
作为以下字段:
一天中的小时(1-24)
这就解释了为什么你的午夜时间为24而不是00。如果想要值介于01和24之间,请不要在格式字符串中使用kk
!我不记得上次我想要使用类似的东西,但可能是在某些情况下使用它(特别是对于总是“在一小时内”的值,所以你得到24:00而不是00:00)。
请务必查阅文档,了解字符串的含义。
答案 3 :(得分:1)
H is zero to 23 (0-23)
,但是如果您使用小写字母k is one to 24 (1-24)
。唯一的区别是这一点,两者都是正确的时间。您可以查看我在下面提供的java文档链接。
周守军:SimpleDateFormat
答案 4 :(得分:0)
如果你不能使用日期和日历...这个类很容易出错。
jodatime这是一个更好的解决方案