将字符串解析为CSV数据中的小时数

时间:2015-08-17 12:37:26

标签: java

我一直在尝试解析我从CSV文件中获取的字符串并转换列#34; start"到小时。这是我的代码:

public class BeerSong {


    private static final String csvFileName = "HourList201403.csv";
    public static void main (String[] args) throws IOException, java.text.ParseException {        

        CSVReader csvReader = new CSVReader(new FileReader(csvFileName));
        List<String[]>allLine = csvReader.readAll();

        SimpleDateFormat start = new SimpleDateFormat("HH:mm");
        Calendar calendar = GregorianCalendar.getInstance();
        int startH;
        Date startHour;
        for (String[] line : allLine) {
            startHour=start.parse(line[3]);
            calendar.setTime(startHour);
            startH = calendar.get(Calendar.HOUR);
            System.out.println(line[3]+", "+line[4]);
            System.out.println("Work: "+startH);            
        }
    }
}

当我尝试运行时,它会输出错误:

  

线程中的异常&#34; main&#34; java.text.ParseException:无法解析的日期:&#34;开始&#34;

那么,我在这里做错了什么以及如何解决这个问题?

CSV格式是这样的,它有很多行,所以我在这里放了一些:

Person Name, Person ID, Date, Start, End
Scott Scala, 2, 2.3.2014, 6:00, 14:00
Janet Java, 1, 3.3.2014, 9:30, 17:00
Scott Scala, 2, 3.3.2014, 8:15, 16:00
Larry Lolcode, 3, 3.3.2014, 18:00, 19:00

2 个答案:

答案 0 :(得分:2)

尝试解析字符串时会抛出java.text.ParseException&#34;开始&#34;作为Date

显然,这是电子表格的标题,因此您应跳过第一行(请注意索引1):

 for (int i = 1; i < allLine.size(); i++) {

请注意,您需要第3列中的其他字段始终为格式HH:mm,即不为空等。

这里的技巧是使用快速枚举和跳过第一行,或者如上所示,使用从索引int开始的基于1的迭代(集合从0开始,这样就可以跳过第一项。

答案 1 :(得分:2)

您遍历循环中的所有已解析行。第一行是: Person Name, Person ID, Date, Start, End。所以你想要读出的第4项: startHour=start.parse(line[3]);Start。我想你必须跳过循环中的第一行:

for(int i = 1; i < allLine.size(); i++){ String[] line = allLine.get(i);