java - 没有年份的日期时间解析中的难题

标签 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 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”?这是一种非常奇怪的格式。

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

关于java - 没有年份的日期时间解析中的难题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15685568/

相关文章:

java - 如何获取 .kt 文件中所有类的列表

java - 使用自定义 View 解析器和自定义 View 的 Spring MVC AJAX 和 JSON

php - 如何从当前日期 PHP 获取最近 7 周、7 个月的日期范围?

python - 确定当天的开始和结束时间(UTC -> EST -> UTC); Python

java - Android java - 将字符串 "2013/12/17"正确转换为UNIX的时间戳

java - 如何在 java 中组合具有相同属性值的对象的 2 个数组列表

java - 无法找到错误的根本原因(GWT-Umbrella 异常)

datetime - 如何解析 Metro (C++/CX) 应用程序中的日期?

DTG 格式的 SimpleDateFormat 解析

java - 将 Java Date 从一种格式转换为另一种格式而不将其转换为字符串