2013-03-28 116 views
0

我想將一些字符串解析成日期,並將日期格式化爲另一種樣式的字符串。在解析某個日期時間字符串而不是年份時,我發現了以下難題。我有兩個不同的輸入字符串,但輸出是相同的。這真的很困惑。任何建議如何解決這個問題?謝謝。在日期時間解析謎題沒有年份

System.out.println(parseAndFormat("MAR 22 12:10:23", 
       "MMM dd hh:mm:ss", "yyyy-MM-dd a HH:mm:ss.SSS Z")); 
//Actual : 1970-03-22 AM 00:10:23.000 +0800 
//Expected: 1970-03-22 PM 12:10:23.000 +0800 
System.out.println(parseAndFormat("MAR 22 00:10:23", 
       "MMM dd hh:mm:ss", "yyyy-MM-dd a HH:mm:ss.SSS Z")); 
//Actual: 1970-03-22 AM 00:10:23.000 +0800 
//Expected: 1970-03-22 AM 00:10:23.000 +0800 
private static String parseAndFormat(String input, String parse, 
     String format) throws ParseException { 
    DateFormat parser = new SimpleDateFormat(parse, Locale.ENGLISH); 
    DateFormat formater = new SimpleDateFormat(format, Locale.ENGLISH); 
    Date date = parser.parse(input); 
    String result = formater.format(date); 
    return result; 
} 

回答

2

你總是提供hh爲您的時間輸入格式,儘管它看起來你提供價值,提供24小時時鐘的事實。使用HH而不是hh。事實上,你沒有一年的價值與此無關。

注意,在你的輸出格式,你帶AM/PM指示(a),這是奇混合24小時格式(HH)。爲什麼你想要顯示「1970-03-22 PM 16:10:23.000 +0800」例如?這是一種非常奇怪的格式。

請參閱SimpleDateFormat的文檔以獲取有關各種格式說明符含義的更多詳細信息。

+0

感謝喬恩,它的工作原理。我忘記了如何使用'hh'和'HH'。這與年份領域毫無關係。 –