Неразборчивая ошибка даты на 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)

ошибка, мой текстовый файл имеет следующие входные данные:

7 Рэнди, 7 июня 1996 г.
Омар, 20 февраля 1999 г.
Сью, 14 сентября 1990 г.
Крис, 14 сентября 1990 г.
Адам, 20 февраля 1996 г. 27 октября 1994 г.

Как я могу исправить ошибку?


person online.0227    schedule 29.03.2015    source источник
comment
Это сработало для меня, ваша ошибка не возникает на моей машине. Какая у вас версия Java и ОС, на которой вы запускаете пример?   -  person Tien Nguyen    schedule 29.03.2015
comment
Tien Nguyen › Ubuntu Linux 14.04 LTS, jdk1.8.0_31 (я думаю, 64-битная). это странно .. потому что это работало на моем школьном компьютере, но не работало на моем компьютере. Какая у вас версия jdk? думаю надо заменить..   -  person online.0227    schedule 29.03.2015
comment
Я использую Java 1.7.0_65 и Ubuntu, поэтому я добавил свой ответ ниже, надеюсь, он сработает для вас.   -  person Tien Nguyen    schedule 29.03.2015


Ответы (3)


Вы работаете на машине 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);
person Tien Nguyen    schedule 29.03.2015

Исключением является то, что ожидаемый формат — dd, но запись вашего файла содержит иное. В этом конкретном случае вызов синтаксического анализа сработал бы, если бы запись была следующей: 7 Рэнди, 07 июня 1996 г. Обратите внимание на 0 перед 7, чтобы сделать это правильным форматом dd.

Reg решение, я думаю, вы можете поймать исключение разбора, и если вы уверены, что это единственный случай, который может появиться в вашем файле, который не поддается анализу, вы можете исправить строку в блоке catch и выполнить повторный анализ.

person sujit    schedule 29.03.2015
comment
Извините, я изменился на Рэнди 07 июня 1996 г., как вы сказали, но он по-прежнему не работает ... та же ошибка, что и следующая: Исключение в потоке main java.text.ParseException: неразборчивая дата: 07 июня 1996 г. в java.text. DateFormat.parse(DateFormat.java:366) в L10C.main(L10C.java:27) - person online.0227; 29.03.2015

Я использовал следующий формат, чтобы изменить строку на дату

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

Это сработало для меня.

person Kumrun Nahar Keya    schedule 16.02.2016