2013-03-28 117 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'。这与年份领域毫无关系。 –