Как выбрать класс даты / времени в java8 среди LocalDateTime, ZonedDateTime и других классов? - PullRequest
0 голосов
/ 23 ноября 2018

Я хочу преобразовать предварительный Java8, как показано ниже.

DateFormat formatter = new SimpleDateFormat(timestampPattern, locale);
Date dt = formatter.parse(timestamp);
Date currentDateTime = getCurrentTime();

В код Java 8 для поддержки более 3 цифр в миллисекундах.Я нашел способы сделать это, используя следующий простой код:

String parsedate="2016-03-16 01:14:21.6739";
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSS"); 
LocalDateTime newdate = LocalDateTime.parse(parsedate, dateTimeFormatter);

Проблема с приведенным выше кодом заключается в том, что вам нужно знать определенный класс перед его синтаксическим анализом, например, если он содержит только дату, вы должны использовать LocalDate, и еслитолько время LocalTime и, если дата + время + зона, вы должны использовать ZonedDateTime.

Моя проблема в том, что я не знаю timestampPattern или timestamp (приведено во фрагменте кода до Java8) перед рукой (так как это ввод пользователя) поэтому не могу выбрать подкласс в моем коде.Есть ли лучший способ для этого?

1 Ответ

0 голосов
/ 23 ноября 2018

Следующий код покажет вам, как с этим справиться:

String parsedate="2016-03-16 01:14:21.6739";
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSS");
TemporalAccessor parsed = dateTimeFormatter.parse(parsedate);
System.out.println(parsed.getClass());
// with the Parsed object you can then construct what you require... e.g. LocalDate:
System.out.println(LocalDate.from(parsed));
// or LocalDateTime:
System.out.println(LocalDateTime.from(parsed));

Это напечатает:

class java.time.format.Parsed
2016-03-16
2016-03-16T01:14:21.673900

Так что вам просто нужно использовать то, что вам требуется в вашем коде исоздайте свой LocalDate или LocalDateTime из Parsed -объекта.

Обратите внимание, что если пользователь может ввести только yyyy-MM-dd и вы использовали бы такой формат даты и времени, то вы получитепроблемы с созданием LocalDateTime из него, но я думаю, что вы обычно знаете, какой тип цели вам нужен.В противном случае вы могли бы просто поработать с TemporalAccessor.

Чтобы решить конкретную проблему типа даты, вам может потребоваться либо работать с исключениями (попробуйте проанализировать ее (или вызвать from изParsed -объект) и возврат к следующему возможному формату или типу даты) или просто предварительно проверьте формат и используйте соответствующий форматировщик даты и введите его, что я скорее рекомендую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...