无法解析日期

Date could not be parsed

我有一个自定义日期字符串,它基本上是年份的最后一位数字、对应于月份的数字、日期、小时、分钟和秒的串联。
示例数据 String171231120000

我希望它的格式类似于:2017-12-31T12:00:00 但它似乎无法解析。

你能帮忙检查一下我下面的代码有什么问题吗?

String dateInString = "171231120000";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-ddThh:mm:ss");     
Date date = sdf.parse(dateInString);

System.out.println(date);

那是因为你的日期字符串的格式不是 yyyy-mm-ddThh:mm:ss 你应该使用类似这样的格式 yyMMddhhmmss

您似乎错过了 'T',只写了 T

在 SimpleDateFormat 上检查此 Oracle documentation。 您可以尝试将您的代码行替换为这一行:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");

更新

或者这个:

SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMMddd'T'HHmmss");

取决于你的字符串。我敢肯定你没写对T。试试这个!

如果这对你有帮助,请告诉我!

更新 2

Util 方法将您的字符串解析为 SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");

public String gerRightFormat(String input) {
    String output = "";
    for (int i = 0; i < input.length(); i++) {
        if (i <= 4) {
            output += input.charAt(i);
        } else if (i >= 5 && i <= 6) {
            output += input.charAt(i);
        } else if (i >= 7 && i <= 9) {
            output += input.charAt(i);
        } else if (i >= 10 && i <= 12) {
            output += input.charAt(i);
        } else if (i >= 13 && i <= 15) {
            output += input.charAt(i);
        }
        if (i == 3) {
            output += "-";
        } else if (i == 5) {
            output += "T";
        } else if (i == 8) {
            output += ":";
        } else if (i == 11) {
            output += ":";
        }
    }
    return output;
}

您的 output 将是您在 SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); 中的日期字符串。应该可以!