在没有年份的日期时间解析拼图

时间:2013-03-28 15:17:51

标签: java datetime simpledateformat

我想将一些String解析为Date,并将Date格式化为另一种样式的String。在解析一些没有年份的日期时间字符串时,我发现了以下谜题。我有两个不同的输入字符串,但输出相同。真的很困惑。有任何建议如何解决这个问题?感谢。

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;
}

1 个答案:

答案 0 :(得分:2)

您总是提供hh作为输入格式数小时,尽管事实上您似乎提供了24小时制的值。使用HH代替hh。你没有年度价值的事实与此无关。

请注意,在您的输出格式中,您将24小时格式(HH)与am / pm指示符(a)混合使用,该格式为奇怪。你为什么要显示“1970-03-22 PM 16:10:23.000 +0800”?这是一种非常奇怪的格式。

有关各种格式说明符的含义的更多详细信息,请参阅SimpleDateFormat的文档。