Java 上出现无法解析的日期错误

Unparseable date error on Java

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
import java.util.Scanner;
import java.util.TreeMap;

public class L10C
{

    public static void main(String[] args) throws Exception
    {
        File f = new File("src/Birthdates.txt");
        Scanner input = new Scanner(f);

        //-------------------------------------------------Read File & Create N2D Map
        Map<String, Date> n2d = new TreeMap<String, Date>();
        int n = input.nextInt();
        for (int r = 0; r < n; r++)
        {
            // String record = input.nextLine();
            // parse record into two pieces

            String name = input.next();
            String birthdateString = input.nextLine();
            SimpleDateFormat sdf = new SimpleDateFormat("MMM dd, yyyy");
            Date birthdate = sdf.parse(birthdateString.trim());
            //System.out.println(name+" - " + birthdate);
            n2d.put(name, birthdate);
        }
        System.out.println("N2D: " + n2d); // debugging output

        //-------------------------------------------------Read File & Create D2N Map
        Map<Date, String> d2n = new TreeMap<Date, String>();
        for (String s : n2d.keySet())
        {
            Date d = n2d.get(s);
            if (!d2n.containsKey(d))
            {
                d2n.put(d, s);
            }
            else
            {
                String existingName = d2n.get(d);
                if (s.compareTo(existingName) == -1) // means s < existingName
                {
                    d2n.put(d, s);
                }
            }
        }
        System.out.println("D2N: " + d2n); // debugging outpu

        //-------------------------------------------------Output D2N Formatted
        for (Date d : d2n.keySet())
        {
            System.out.printf("%tb %<td, %<tY --> %s\n", d, d2n.get(d));
        }
    }
}

你好。我得到

Exception in thread "main" java.text.ParseException: Unparseable date: "Jun 7, 1996"
    at java.text.DateFormat.parse(DateFormat.java:366)
    at L10C.main(L10C.java:27)

错误,我的 txt 文件有以下输入:

7 Randy Jun 7, 1996
Omar Feb 20, 1999
Sue Sep 14, 1990
Chris Sep 14, 1990
Adam Feb 20, 1996
Jim Sep 14, 1990
Phillip Oct 27, 1994

如何修复错误?

异常是因为预期的格式是 dd 但您的文件条目包含其他格式。在这种特殊情况下,如果条目如下所示,解析调用将起作用: 7 兰迪 1996 年 6 月 7 日 注意 7 之前的 0 使其成为正确的 dd 格式。

Reg 解决方案,我认为你可以捕获解析异常,如果你确定这是唯一可能出现在你的文件中的无法解析的情况,你可以更正 catch 块中的字符串并重新解析。

您正在 Java 8 机器上工作。对于 Java 8,Oralce 提供新的 API 来处理日期和时间。请将您当前的 API(第 28 行)替换为以下 API 以使其正常工作。

String str = "1986-04-08 12:30";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
LocalDateTime dateTime = LocalDateTime.parse(str, formatter);

我用下面的格式把字符串改成了日期

String dateInString = "Sun Mar 06 11:28:16 IST 2011";
        DateFormat df = new SimpleDateFormat("EEE MMM d HH:mm:ss zzz yyyy");
        Date startDate = (Date) df.parse(dateInString);

对我来说效果很好。