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

时间:2015-03-29 04:11:16

标签: java date-format simpledateformat

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 1999年2月20日   苏1990年9月14日   克里斯1990年9月14日   亚当1996年2月20日   吉姆1990年9月14日   Phillip,1994年10月27日

如何修复错误?

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

我使用以下格式将字符串更改为日期

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

它对我来说很好。