Преобразовать строку в дату в формате мм / дд / гггг ЧЧ: мм-ЧЧ-мм Зона

У меня есть дата в формате 18.07.2008 01:00-04:00 CDT в строковой переменной. где 01: 00-04: 00 - временной диапазон. Мне нужно преобразовать это в формат даты в двух отдельных переменных, помня о часовом поясе.

Var1 должен иметь 18.07.2008 01:00 CDT Var2 должен иметь 18.07.2008 04:00 CDT

Должен ли я токенизировать эту строку и отделить 01:00-04:00? или есть способ в SimpleDateParser к этому?

2 ответа

Решение

У меня есть дата в формате 18.07.2008 01:00-04:00 CDT в строковой переменной.

Поскольку входная строка не имеет стандартного формата даты / времени, вам нужно разделить строку на две строки, а затем проанализировать их отдельно:

String input = "07/18/2018 01:00-04:00 CDT";

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy HH:mm z");

// parse 07/18/2018 01:00 CDT
ZonedDateTime first = ZonedDateTime.parse(input.replaceAll("-\\d{2}:\\d{2}", ""), formatter); 

// parse 07/18/2018 04:00 CDT
ZonedDateTime second = ZonedDateTime.parse(input.replaceAll("\\d{2}:\\d{2}-", ""), formatter); 

Проблема в том, что у вас нет даты. Это интервал. Форматер даты и времени не сможет с этим справиться. API форматирования создают Date объект (для наследия DateFormat классы) или TemporalAccessor объект (для DateTimeFormatter). Прямой поддержки интервалов в текущем или устаревшем API даты / времени Java нет.

Учитывая, что классы format / formatter не могут возвращать интервал, неудивительно, что строки формата не поддерживают это 1.

Таким образом, единственная альтернатива - это выполнить синтаксический анализ / разбивание строк самостоятельно. @ Ответ Sun - одно из решений.


1 - Если бы вы могли написать шаблон форматирования / форматирования, который скажет синтаксическому анализатору, например, "игнорировать следующие 5 символов", вы могли бы создать два разных форматера, которые проанализировали ваш пример для извлечения первого datetime и второго datetime. Но ты не можешь. Одна из причин заключается в том, что этот подход не будет работать для форматирования.

Другие вопросы по тегам