Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 没有年份的日期时间解析之谜_Java_Datetime_Simpledateformat - Fatal编程技术网

Java 没有年份的日期时间解析之谜

Java 没有年份的日期时间解析之谜,java,datetime,simpledateformat,Java,Datetime,Simpledateformat,我想将一些字符串解析为日期,并将日期格式化为另一种样式的字符串。当解析一些没有年份的日期时间字符串时,我发现了以下难题。我有两个不同的输入字符串,但输出是相同的。这真是令人困惑。有什么建议可以解决这个问题吗?谢谢 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

我想将一些字符串解析为日期,并将日期格式化为另一种样式的字符串。当解析一些没有年份的日期时间字符串时,我发现了以下难题。我有两个不同的输入字符串,但输出是相同的。这真是令人困惑。有什么建议可以解决这个问题吗?谢谢

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

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

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


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

谢谢Jon,它很有效。我忘了怎么用“hh”和“hh”。它实际上与年份字段无关。