Анализатор клиентов OffsetDateTime [дубликат]
Привет, я пытаюсь разобрать String 20110330174824917 на OffsetDateTime, используя DateTimeFormatter, поэтому
public static void main(String[] args) {
// System.out.println(OffsetDateTime.parse("20110330174824917", DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS")));
System.out.println(LocalDateTime.parse("20110330174824917", DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS")));
}
но я получаю
исключение в потоке «main» java.time.format.DateTimeParseException: текст '20110330174824917' не может быть проанализирован, неанализируемый текст обнаружен с индексом 8 в java.time.format.DateTimeFormatter.parseResolved0 (DateTimeFormatter.java:1952) в java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851) в java.time.LocalDateTime.parse(LocalDateTime.java:492)
Привет, ребята, похоже, эта проблема связана с java 8 https://bugs.openjdk.java.net/browse/JDK-8031085
Спасибо всем за помощь
2 ответа
Строка даты и времени не содержит информации о часовом поясе, поэтому для ее анализа необходимо явно передать информацию о часовом поясе. Вы можете использовать
DateTimeFormatter#withZone
для синтаксического анализа строки даты и времени в
ZonedDateTime
который вы можете преобразовать в
OffsetDateTime
с помощью
<tcode id="1597863"></tcode>.
import java.time.OffsetDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
String strDateTime = "20110330174824917";
// Change the ZoneId as per your requirement e.g. ZoneId.of("Europe/London")
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS", Locale.ENGLISH)
.withZone(ZoneId.systemDefault());
OffsetDateTime odt = ZonedDateTime.parse(strDateTime, dtf)
.toOffsetDateTime();
System.out.println(odt);
}
}
Выход:
2011-03-30T17:48:24.917+01:00
Вы можете определить используемые
Zone
для Formatter и объедините входную строку с правильным смещением зоны
// note the added Z at the end of the pattern for the offset
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSSZ").withZone(ZoneId.of("UTC"));
OffsetDateTime dateTime = OffsetDateTime.parse("20110330174824917" + "+0000", formatter);