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



我试图从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));
}

如何检测和读取不同格式的时间?我需要它作为Time,而不是字符串。或者有没有什么方法可以在Excel中保留前导零?我没能做到这一点,因为Excel不保存数据格式。

提前谢谢。

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

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

如果您使用宽松的DateTimeFormatter,您的日期会起作用,即:

DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.parseLenient()
.appendPattern("dd/MM/yyyy").appendLiteral(",").appendPattern("HH:mm:ss")
.toFormatter();

相关内容

  • 没有找到相关文章

最新更新