Java.time.format.DateTimeParseException возникает только тогда, когда мой код выполняется в Windows 10 [дубликат]JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Java.time.format.DateTimeParseException возникает только тогда, когда мой код выполняется в Windows 10 [дубликат]

Сообщение Anonymous »

Следующий код генерирует исключение java.time.format.DateTimeParseException только при его выполнении в среде Windows 10 (версия версии 10.0.19045.5247). Я тестировал его с использованием двух разных JVM, Graal JDK 17.0.2 и Eclipse Adoptium 11.0.15.10-hotspot, из двух разных IDE (IntelliJ IDEA 2024.1.7 Ultimate и VS Code 1.96.2):

Код: Выделить всё

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();
}
}
}
Пример строки файла Alarms.csv выглядит следующим образом:

Код: Выделить всё

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
Полная трассировка стека выброшенного исключения выглядит следующим образом:

Код: Выделить всё

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)
Обратите внимание, что это исключение генерируется только тогда, когда я запускаю этот код в Windows. Когда я переместил файл Alarms.csv в свою среду WSL2 (Ubuntu 20.04) и выполнил тот же код в своем блоке WSL, используя точку доступа Eclipse Adoptium 11.0.15.10, он работал правильно, как и ожидалось.
Известна ли какая-либо проблема с анализом файлов CSV в Windows, которая затрагивает упомянутые JVM? Если да, то что делать, чтобы это исправить?

Подробнее здесь: https://stackoverflow.com/questions/792 ... s-executed
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»