爲什麼解析「23:00 PM」與SimpleDateFormat("hh:mm aa")
返回上午11點?爲什麼使用SimpleDateFormat(「hh:mm aa」)解析「23:00 PM」會返回11 a.m.?
回答
您應該會收到一個異常,因爲「23:00 PM」不是有效的字符串,但在處理日期解析時,Java的日期/時間設施默認爲lenient。
邏輯是,下午23:00是晚上11:00,這是第二天上午11:00的12小時。你還會看到諸如「4月31日」被解析爲「5月1日」(4月30日後一天)的內容。
如果您不想要這種行爲,請使用DateFormat#setLenient(boolean)將SimpleDateFormat上的lenient屬性設置爲false,並且在傳遞無效日期/時間時會得到異常。
我猜想,這確實是這樣的:
hours = hours % 12;
,以確保時間是在適當的範圍內。
如果您要解析24小時時間,您希望將「HH:mm aa」作爲格式。
public static void main(String[] args) throws ParseException {
SimpleDateFormat df = new SimpleDateFormat("HH:mm aa");
final Date date = df.parse("23:00 PM");
System.out.println("date = " + df.format(date));
}
輸出
date = 23:00 PM
SimpleDateFormat df = new SimpleDateFormat(「HH:mm aa」);正在給皮棉警告.. 你有想法如何解決這個問題嗎? – NovusMobile 2013-01-25 05:41:52
薩蒂揚,警告是什麼? – 2013-01-27 04:07:18
你試過HH:mm aa
?
HH
是24小時,同時hh
是12
23:00可以被認爲是11:00 第二天。 Javascript和PHP的工作就像這樣,但我不能說Java。
這裏是在javadoc
H Hour in day (0-23)
k Hour in day (1-24)
K Hour in am/pm (0-11)
h Hour in am/pm (1-12)
注意, 「H」 將是小時1-12 specifed的格式選項。如果您想要處理1-24,請嘗試「k」。爲0-23嘗試「H」。但是如果你輸入不可能的數據,我不會期望有效的結果。
- 1. SimpleDateFormat解析返回null
- 2. 爲什麼我的NSDateFormatter有時會返回a.m.或p.m.與yyyyMMddHHmmssSSS?
- 3. SimpleDateFormat返回1小時爲什麼?
- 4. SimpleDateFormat的解析返回錯誤值
- 5. 用SimpleDateFormat顯示HH:MM
- 6. 爲什麼用Nokogiri解析HTML會返回空白?
- 7. dd/MM/yyyy hh:mm am/pm到MM/dd/yyyy hh:mm am/pm
- 8. 解析 - 爲什麼user.getSessionToken()返回undefined
- 9. 解析JSON返回零,爲什麼?
- 10. hh:mm aa(12小時格式)轉換爲HH:mm(24小時制)
- 11. SimpleDateFormat解析不會返回任何時間
- 12. SimpleDateFormat的解析迴流端
- 13. 在SimpleDateFormat中使用〜#解析()
- 14. 爲什麼SimpleDateFormat解析不正確的日期?
- 15. 解析AM/PM時的解析日期
- 16. 爲什麼使用weekyear解析日期會返回錯誤的一年?
- 17. 爲什麼parseInt(013)返回11?
- 18. 用javascript中的a.m/p.m替換am/pm
- 19. 爲什麼在AA PC上使用AA AA作爲引導簽名?
- 20. 爲什麼Scala Future會使用flatMap返回None並理解?
- 21. 如何僅使用SimpleDateFormat解析日期
- 22. 的SimpleDateFormat不解析
- 23. 將SimpleDateFormat解析爲JodaTime
- 24. 如何解析和區分'4 PM'或'PM'在javascript字符串值中返回?
- 25. SimpleDateFormat的解析函數改變格式
- 26. 爲什麼SimpleDateFormat無法解析日期字符串中的weekday?
- 27. ORA-01855:AM/A.M。或PM/P.M。要求
- 28. 時間轉換爲HH:MM PM/AM格式
- 29. 轉換格式爲HH:MM AM/PM至HH:MM:SS
- 30. 爲什麼即使使用回調,Ajax也不會返回值
是的......這個問題甚至沒有意義。垃圾進垃圾出。你可能是正確的,它在內部爲'下午'增加了12個小時。 – mpen 2009-07-20 17:48:45
@彼得:我知道這個!我幾分鐘後才發現問題所在。這不是問題。 (您是否曾經調試過別人的代碼?那麼它會有意義的。) – OscarRyz 2009-07-20 17:58:32