В частности, меня интересует снисходительность синтаксического анализатора, когда дело доходит до количества цифры в долях секунды. Моя реализация позволяет использовать временные метки с 9 цифрами в течение долей секунды, однако анализатор успешно обрабатывает временные метки только с 8 цифрами и не справляется с метками с 7 или меньше. Это заставило меня задаться вопросом, есть ли основная причина такого поведения, является ли оно частью конструкции DateTimeFormatter и документировано ли оно где-либо.
Я написал тест, используя следующий код:
Код: Выделить всё
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
public class DateTimeExample {
public static void main(String[] args) {
String[] timestamps = {
"2023-10-05T15:14:29.123456789Z", // 9 digits
"2023-10-05T15:14:29.12345678Z", // 8 digits
"2023-10-05T15:14:29.1234567Z", // 7 digits
"2023-10-05T15:14:29.123456Z", // 6 digits
"2023-10-05T15:14:29.12345Z", // 5 digits
"2023-10-05T15:14:29.1234Z", // 4 digits
"2023-10-05T15:14:29.123Z", // 3 digits
"2023-10-05T15:14:29.12Z", // 2 digits
"2023-10-05T15:14:29.1Z", // 1 digit
"2023-10-05T15:14:29Z" // no fractional seconds
};
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss[.SSSSSSSSS]'Z'");
for (String timestamp : timestamps) {
try {
LocalDateTime dateTime = LocalDateTime.parse(timestamp, formatter);
System.out.println("Parsed date: " + dateTime);
} catch (DateTimeParseException e) {
System.err.println("Failed to parse: " + timestamp + " - " + e.getMessage());
}
}
}
}
Когда я запускаю этот код, вот результат:
< pre class="lang-none Prettyprint-override">
Код: Выделить всё
Parsed date: 2023-10-05T15:14:29.123456789
Parsed date: 2023-10-05T15:14:29.123456780
Failed to parse: 2023-10-05T15:14:29.1234567Z - Text '2023-10-05T15:14:29.1234567Z' could not be parsed at index 19
Failed to parse: 2023-10-05T15:14:29.123456Z - Text '2023-10-05T15:14:29.123456Z' could not be parsed at index 19
Failed to parse: 2023-10-05T15:14:29.12345Z - Text '2023-10-05T15:14:29.12345Z' could not be parsed at index 19
Failed to parse: 2023-10-05T15:14:29.1234Z - Text '2023-10-05T15:14:29.1234Z' could not be parsed at index 19
Failed to parse: 2023-10-05T15:14:29.123Z - Text '2023-10-05T15:14:29.123Z' could not be parsed at index 19
Failed to parse: 2023-10-05T15:14:29.12Z - Text '2023-10-05T15:14:29.12Z' could not be parsed at index 19
Failed to parse: 2023-10-05T15:14:29.1Z - Text '2023-10-05T15:14:29.1Z' could not be parsed at index 19
Parsed date: 2023-10-05T15:14:29
Из этого поведения я делаю вывод, что DateTimeFormatter снисходителен к использованию в шаблоне до одной дополнительной цифры. Правильно ли это, и если да, то есть ли какая-либо соответствующая документация, на которую я могу сослаться?
Подробнее здесь: https://stackoverflow.com/questions/790 ... al-seconds