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日
如何修复错误?
答案 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);
它对我来说很好。