Позволяет ли Java DateTimeFormatter щадящий анализ в течение долей секунды?JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Позволяет ли Java DateTimeFormatter щадящий анализ в течение долей секунды?

Сообщение Anonymous »

В настоящее время я работаю с Java DateTimeFormatter для анализа меток времени в формате ISO 8601, особенно тех, которые содержат доли секунды. Экспериментируя с различными форматами временных меток, я заметил неожиданное поведение относительно того, как форматтер обрабатывает необязательные дробные секунды.
В частности, меня интересует снисходительность синтаксического анализатора, когда дело доходит до количества цифры в долях секунды. Моя реализация позволяет использовать временные метки с 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
Он успешно анализирует метки времени с 9 цифрами для дробных секунд или без дробной части, что является ожидаемым поведением. Но почему он также работает с 8 цифрами для дробной части?
Из этого поведения я делаю вывод, что DateTimeFormatter снисходителен к использованию в шаблоне до одной дополнительной цифры. Правильно ли это, и если да, то есть ли какая-либо соответствующая документация, на которую я могу сослаться?

Подробнее здесь: https://stackoverflow.com/questions/790 ... al-seconds
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Позволяет ли Java DateTimeFormatter щадящий анализ в течение долей секунды?
    Anonymous » » в форуме JAVA
    0 Ответы
    27 Просмотры
    Последнее сообщение Anonymous
  • Позволяет ли Java DateTimeFormatter щадящий анализ в течение долей секунды?
    Anonymous » » в форуме JAVA
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • DateTime.ParseExact с переменной долей секунды
    Гость » » в форуме C#
    0 Ответы
    17 Просмотры
    Последнее сообщение Гость
  • Невозможно изменить время (от секунд до тысячных долей секунды)
    Anonymous » » в форуме Android
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Понимание значений долей секунды в метке времени
    Anonymous » » в форуме JAVA
    0 Ответы
    26 Просмотры
    Последнее сообщение Anonymous

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