簡體   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