Анализатор клиентов 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);
Другие вопросы по тегам