我在解析API返回的日期格式時出現問題,而且我從未見過(我相信它是自定義格式)。日期的一個例子:使用SimpleDateFormat解析自定義時間格式
/Date(1353447000000+0000)/
當我第一次遇到這種格式它沒有多久我就看出這是在一個時區偏移毫秒的時間。雖然我使用SimpleDateFormat提取這個日期時遇到了麻煩。這是我第一次嘗試:
String weirdDate = "/Date(1353447000000+0000)/";
SimpleDateFormat sdf = new SimpleDateFormat("'/Date('SSSSSSSSSSSSSZ')/'");
Date d1 = sdf.parse(weirdDate);
System.out.println(d1.toString());
System.out.println(d1.getTime());
System.out.println();
Date d2 = new Date(Long.parseLong("1353447000000"));
System.out.println(d2.toString());
System.out.println(d2.getTime());
輸出:
Tue Jan 06 22:51:41 EST 1970
532301760
Tue Nov 20 16:30:00 EST 2012
1353447000000
日期(和解析的毫秒數),甚至還沒有接近,我一直無法找出原因。經過一些故障排除後,我發現我嘗試使用SDF的方式顯然是有缺陷的。例如:
String weirdDate = "1353447000000";
SimpleDateFormat sdf = new SimpleDateFormat("S");
Date d1 = sdf.parse(weirdDate);
System.out.println(d1.toString());
System.out.println(d1.getTime());
輸出:
Wed Jan 07 03:51:41 EST 1970
550301760
我不能說我曾經嘗試過使用SDF通過這種方式,只是在分析毫秒的時間,因爲我通常會使用Long.parseLong()
和公正直接將它傳遞給new Date(long)
(實際上我現在所使用的解決方案只是一個正則表達式並解析一長串)。我正在尋找一個更清晰的解決方案,我可以輕鬆地提取這個時間以毫秒爲單位的時區,並快速解析出日期,而無需手動處理。任何人有任何想法或可以發現我上面邏輯中的錯誤?非常感謝幫助。
是的,我不認爲SDF知道如何處理以大量小單位表示的日期時間,無論是自紀元以來的毫秒數還是自紀元以來的數天。即使在設計層面,這種情況的跡象表明,日月和日年使用兩種不同的模式字母。 –
是的,這是我現在的解決方案。我有一個正則表達式提取這個值,就像你上面解釋的那樣。我也將不得不分析時區偏移量以及我想象的。我只是希望避免這種手動處理... – ggrigery