Как разобрать разные строки даты в LocalDate / Year? - PullRequest
1 голос
/ 13 июня 2019

Я получаю список объектов от Json, каждый из которых содержит строку String.Существует два разных формата, один стандартный формат "гггг-ММ-дд", второй просто год "гггг".Каков элегантный способ разобрать эти строки в метку времени Unix?В данный момент я использую двойной блок try-catch с SimpleDateFormat, но я бы хотел найти лучшее решение.

Ответы [ 2 ]

1 голос
/ 13 июня 2019

Если длина составляет четыре символа, проанализируйте как Year.

Year y = Year.parse( input ) ;

Как вы хотите представить это как момент?Возможно, в первый момент первого дня года в UTC?

LocalDate ld = y.atDay( 1 ) ;
Instant instant = ld.atStartOfDay( ZoneOffset.UTC ).toInstant() ;

Под «меткой времени Unix» вы подразумевали количество миллисекунд с первого момента 1970 года в UTC?

long millis = instant.toEpochMilli() ;

Если длина ввода 10 символов, выполните синтаксический анализ LocalDate.

LocalDate ld = LocalDate.parse( input ) ;

Выполните те же действия, что и выше.

long millis = ld.atStartOfDay( ZoneOffset.UTC ).toInstant().toEpochMilli() ;

Соберите все это вместе.

switch ( input.length() ) {
    case 4 : return Year.parse( input ).atDay( 1 ).atStartOfDay( ZoneOffset.UTC ).toInstant().toEpochMilli() ;
    case 10 : return LocalDate.parse( input ).atStartOfDay( ZoneOffset.UTC ).toInstant().toEpochMilli() ;
    default : … throw exception, unexpected input. 
}
0 голосов
/ 13 июня 2019

Этот ответ является копией моего ответа на другой вопрос. Ваш вопрос может быть дубликатом этого вопроса: Как преобразовать строку в дату, не зная формат?

Однажды у меня была задача написать код, который будет анализировать строку с датой, где формат даты заранее неизвестен. То есть Я должен был разобрать любой допустимый формат даты. Я написал проект и после этого написал статью, в которой описана идея моей реализации. Вот ссылка на статью: Java 8 пакет java.time: парсинг любой строки на сегодняшний день . Общая идея заключается в том, чтобы записать все шаблоны, которые вы хотите поддерживать, во внешний файл свойств, прочитать их оттуда и попытаться анализировать вашу строку по этим форматам один за другим, пока вы не добьетесь успеха или не исчерпаете форматы. Обратите внимание, что порядок также будет важен, так как некоторые строки могут быть действительными для нескольких форматов (различия США / Европы). Преимущество заключается в том, что вы можете продолжать добавлять / удалять форматы в файл, не меняя код. Таким образом, такой проект также может быть настроен для разных клиентов

...