Преобразовать строку в дату в формате мм / дд / гггг ЧЧ: мм-ЧЧ-мм Зона
У меня есть дата в формате 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. Но ты не можешь. Одна из причин заключается в том, что этот подход не будет работать для форматирования.