Преобразовать строку в дату в формате мм / дд / гггг ЧЧ: мм-ЧЧ-мм Зона - PullRequest
0 голосов
/ 27 сентября 2018

У меня есть дата в формате 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 ]

0 голосов
/ 27 сентября 2018

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

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

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


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

0 голосов
/ 27 сентября 2018

У меня есть дата в формате 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); 
...