Java.time.format.DateTimeParseException wird nur ausgelöst, wenn mein Code unter Windows 10 ausgeführt wirdJava

Java-Forum
Guest
 Java.time.format.DateTimeParseException wird nur ausgelöst, wenn mein Code unter Windows 10 ausgeführt wird

Post by Guest »

Der folgende Code löst nur dann eine java.time.format.DateTimeParseException aus, wenn er in einer Windows 10-Umgebung (Version Version 10.0.19045.5247) ausgeführt wird. Ich habe es mit zwei verschiedenen JVMs, Graal JDK 17.0.2 und Eclipse Adoptium 11.0.15.10-Hotspot, von zwei verschiedenen IDEs (IntelliJ IDEA 2024.1.7 Ultimate und VS Code 1.96.2) getestet:
package com.xxx

import java.io.*;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {
public static void main(String[] args) {
final File FILE = new File("C:\\Users\\xxx\\Downloads\\alarms.csv");
// example date: Dec 19, 2024 5:20:53 PM
final String DATE_PATTERN_REGEX = "\"([a-zA-Z]{3} [0-9]{1,2}, 2024 [0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2} PM)\"";
final Pattern PATTERN = Pattern.compile(DATE_PATTERN_REGEX);
final String DATE_PATTERN = "MMM dd, yyyy KK:mm:ss a";
final DateTimeFormatter DATE_TIME_FORMAT = DateTimeFormatter.ofPattern(DATE_PATTERN);

try (BufferedReader br = new BufferedReader(new FileReader(FILE))) {
br.lines().forEach(line -> {
Matcher matcher = PATTERN.matcher(line);
List timestamps = new ArrayList(2);
while (matcher.find()) {
timestamps.add(LocalDateTime.parse(matcher.group(1), DATE_TIME_FORMAT));
}
if (timestamps.size() == 2) {
if (timestamps.get(0).equals(timestamps.get(1))) {
System.out.println(line);
}
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
}

Eine Beispielzeile der Datei alarms.csv ist die folgende:
major,"Dec 19, 2024 5:20:53 PM","Dec 19, 2024 5:21:00 PM",interface:xxx,onu-loss-of-phy-layer,"Event=loss of PHY connectivity with ONU due to missing bursts (LOFi/LOSi or LOBi), Serial-Number=xxx, Reg-ID=, CT-Name=xxx; model-name: xxx; description: xxx",0-1 min

Der vollständige Stack-Trace der ausgelösten Ausnahme lautet wie folgt:
java.time.format.DateTimeParseException: Text 'Dec 19, 2024 5:20:53 PM' could not be parsed at index 0
at java.base/java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:2052)
at java.base/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1954)
at java.base/java.time.LocalDateTime.parse(LocalDateTime.java:494)
at com.xxx.Main.lambda$main$0(Main.java:25)
at java.base/java.util.Iterator.forEachRemaining(Iterator.java:133)
at java.base/java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1845)
at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762)
at com.xxx.Main.main(Main.java:21)

Beachten Sie, dass diese Ausnahme nur ausgelöst wird, wenn ich diesen Code unter Windows ausführe. Als ich die Datei alarms.csv in meine WSL2-Umgebung (Ubuntu 20.04) verschoben und denselben Code in meiner WSL-Box mit Eclipse Adoptium 11.0.15.10-Hotspot ausgeführt habe, funktionierte es wie erwartet ordnungsgemäß.
Gibt es ein bekanntes Problem beim Parsen von CSV-Dateien in Windows, das die genannten JVMs betrifft? Wenn ja, was ist zu tun, um Abhilfe zu schaffen?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post