Java Simpledateformat时间问题

时间:2013-09-25 06:23:01

标签: java datetime

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”会有用吗?

5 个答案:

答案 0 :(得分:3)

来自JavaDocs ...

  

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

<强>更新

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

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

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

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

答案 1 :(得分:3)

SimpleDateFormat文档中记录了这一点:

  

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

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

使用H表示24小时格式,K表示12小时格式。

答案 2 :(得分:1)

没有理由应该是一个错误。 kdocumentedin SimpleDateFormat作为以下字段:

  

一天中的小时(1-24)

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

请务必查阅文档,了解字符串的含义。

答案 3 :(得分:1)

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

周守军:SimpleDateFormat

答案 4 :(得分:0)

如果你不能使用日期和日历...这个类很容易出错。

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