繁体   English   中英

Java简单日期格式时间问题

[英]Java Simple Date Format Time Issues

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

来自JavaDocs ......

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

更新

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

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

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

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

这在SimpleDateFormat文档中有记录:

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

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

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

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

一天中的小时(1-24)

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

始终查阅文档,了解字符串的含义。

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

Souce: SimpleDateFormat

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM