Преобразование строки в LocalDateTime Java 8
Я пытаюсь преобразовать следующую строку в LocalDateTime:
String dateStr = "2020-08-17T10:11:16.908732";
DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.nnnnnn");
LocalDateTime dateTime = LocalDateTime.parse(dateStr, format);
Но я получаю следующую ошибку:
java.time.format.DateTimeParseException: Text '2020-08-17T10:11:16.908732' could not be parsed at index 10
at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949)
at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851)
at java.time.LocalDateTime.parse(LocalDateTime.java:492)
Может ли кто-нибудь помочь посоветовать, как мне правильно форматировать строку в LocalDateTime?
Большое спасибо
2 ответа
Вам не нужно указывать DateTimeFormatter
в этом случае, потому что будет использоваться значение по умолчанию, если вы его вообще не пройдете:
public static void main(String[] args) {
String dateStr = "2020-08-17T10:11:16.908732";
LocalDateTime dateTime = LocalDateTime.parse(dateStr);
System.out.println(dateTime);
}
Этот код выведет 2020-08-17T10:11:16.908732
.
Если вы настаиваете на использовании специального DateTimeFormatter
рассмотрим T
заключив его в одинарные кавычки в шаблоне и не используя наносекундный синтаксический анализ (n
) для разбора долей секунды (S
), иначе результат может быть неверным.
Сделай это так:
public static void main(String[] args) {
String dateStr = "2020-08-17T10:11:16.908732";
DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSSSS");
LocalDateTime dateTime = LocalDateTime.parse(dateStr, format);
System.out.println(dateTime);
}
с тем же выходом, что и выше.
Примечание:
результат использования шаблона"yyyy-MM-dd'T'HH:mm:ss.nnnnnn"
не будет равно разобранному String
вместо этого было бы
2020-08-17T10:11:16.000908732
Для вашего данного строкового шаблона DateTime должен быть обновлен "yyyy-MM-dd'T'HH:mm:ss.nnnnnn"
.
Итак, код должен быть таким:
String dateStr = "2020-08-17T10:11:16.908732";
DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.nnnnnn");
LocalDateTime dateTime = LocalDateTime.parse(dateStr, format);
Для получения дополнительных сведений об этом вы можете обратиться к JavaDoc.
Наряду с этим в вашем заданном вводе DateTime используется 6 цифр, поэтому это не может быть наносекунды. Потому что нано - это 1/1000000000. Таким образом, в нем будет не менее 9 цифр. Таким образом, правильным форматом должна быть вторая дробь с 6 цифрами, например "гггг-ММ-дд'Т'ЧЧ: мм: сс.СССССС".
Сравнение конечных результатов:
С узором: "гггг-ММ-дд'Т'ЧЧ: мм: сс.ннннн"
System.out.println(LocalDateTime.parse("2020-08-17T10:11:16.908732", DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.nnnnnn")));
Выход: 2020-08-7T10:11:16.000908732
С шаблоном: "гггг-ММ-дд'Т'ЧЧ: мм:ss.SSSSSS"
System.out.println(LocalDateTime.parse("2020-08-17T10:11:16.908732", DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSSSS")));
Выход: 2020-08-7T10:11:16.908732