当前位置: 首页 > 知识库问答 >
问题:

CSV文件解析问题:与Excel不同的时间格式(使用Java)

谷梁英资
2023-03-14

我试图从一个csv文件(excel)中读取和解析时间,但由于excel的移除前导零的特性,时间有不同的格式。像这样:

1/1/2021,9:05:28
1/1/2021,2:48:32
1/1/2021,15:11:00
2/1/2021,14:37:38

09:05:28这样的时间在Excel中变成了9:05:28,不能和14:37:38格式一起解析。

ArrayList<className> list = new ArrayList<>();

List<String> lines = Files.readAllLines(Paths.get("file.csv"));
for (int i = 0; i < lines.size(); i++) {
    String[] elements = lines.get(i).split(",");
    // Read data from file
    LocalDate date = LocalDate.parse(elements[0]);
    LocalTime time = LocalTime.parse(elements[1]);
    list.add(new className(date, time));
}
        

提前道谢。

共有1个答案

甄煜
2023-03-14

您可以在DateTimeFormatterBuilder对象上使用多种格式,如下所示。

java prettyprint-override">private static void dateSample() throws IOException {
        ArrayList<TimeDataCsv> list = new ArrayList<>();
        DateTimeFormatter dateOnlyFormatter = new DateTimeFormatterBuilder()
                .appendOptional(DateTimeFormatter.ofPattern("d/M/yyyy"))
                .appendOptional(DateTimeFormatter.ofPattern("d/MM/yyyy"))
                .appendOptional(DateTimeFormatter.ofPattern("dd/M/yyyy"))
                .appendOptional(DateTimeFormatter.ofPattern("dd/MM/yyyy"))
                .toFormatter();

        DateTimeFormatter timeOnlyFormatter = new DateTimeFormatterBuilder()
                .appendOptional(DateTimeFormatter.ofPattern("H:mm:ss"))
                .appendOptional(DateTimeFormatter.ofPattern("HH:mm:ss"))
                .toFormatter();
        List<String> lines = Files.readAllLines(Paths.get("sample.csv"));
        for (int i = 0; i < lines.size(); i++) {
            String[] elements = lines.get(i).split(",");
            String dateString = elements[0].trim();
            String timeString = elements[1].trim();
            LocalDate date = LocalDate.parse(dateString, dateOnlyFormatter);
            LocalTime time = LocalTime.parse(timeString, timeOnlyFormatter);
            list.add(new TimeDataCsv(LocalDateTime.of(date, time)));
        }        
    }

    public static class TimeDataCsv {
        public LocalDate date;
        public LocalTime time;
        public LocalDateTime dateTime;

        public TimeDataCsv(LocalDate date, LocalTime time) {
            this.date = date;
            this.time = time;
        }

        public TimeDataCsv(LocalDateTime dateTime) {
            this.dateTime = dateTime;
        }
    }
}
 类似资料:
  • 在这段代码中,目标是解析一个CSV文件,并将其数据映射到一个bean对象。 文件中的列在原始数据下方有一个标题,有时还有其他信息(如字符串或整数单元格中的数字或单词)。 我在之前的问题中询问如何忽略这些附加信息,并得到了以下代码作为答案: 当我尝试实现此代码时,我在箭头标记的行处出现两个错误。 线程"main"中的异常java.lang.错误:未解决的编译问题: 列表类型中的方法 add(Coun

  • 我有一个需要使用CSVREAD导入的csv文件。问题是它以不同的方式具有日期时间格式,因此需要解析it.Can有人给我一个我应该如何做的例子吗? 我尝试:合并到消息(MESG_DATE_FROMMESG_DATE_TOMESG_DISPLAY_SEQMESG_TIME_DELAYMESG_IDREASONTYPE_MAJOR)选择*from CSVREAD('MESSAGE_0.csv'); 这些

  • 问题内容: 使用nodejs,我想解析一个包含10000条记录的.csv文件,并对每一行进行一些操作。我尝试使用http://www.adaltas.com/projects/node- csv 。我无法让它在每一行暂停。这只会读取所有10000条记录。我需要执行以下操作: 逐行读取csv 在每条线上执行耗时的操作 转到下一行 有人可以在这里提出其他建议吗? 问题答案: 好像您需要使用一些基于流的

  • 使用nodejs,我想解析一个包含10000条记录的.csv文件,并对每一行执行一些操作。我尝试使用http://www.adaltas.com/projects/node-csv。我不能让它每排都停下来。这只是读取所有的10000个记录。我需要做到以下几点: 逐行读取csv 对每行执行耗时操作 转到下一行

  • 我正在研究一个HackerRank问题,我将12小时格式(小时:分钟:秒AM/PM)的时间转换为24小时格式(小时:分钟:秒)(如HH:MM:SS)。我完成了所有的工作,用了3个int变量,分别是小时,分钟,秒,我想把它们变成一个字符串来返回。我使用这样的字符串格式 String str=String.format(“%2d:%2d:%2d”,小时,分钟,秒);但显然不起作用。我也阅读了关于字符串

  • 我正在使用OpenCsv为我的Android应用程序解析.csv文件。我用 kotlin 编写代码。这是我的代码: 我是这样解析csv文件的: 这是我要将csv数据转换为的对象类。 } 我已经在build.gradle文件中添加了这一行: 这是我的csv文件内容: G T,11111 11111 H K,2222222222 KK,33333 33333 P K,44444 44444 但是当我运