Как форматировать даты в Java, когда могут получать даты в различных форматах?

У меня хочет быть следующий формат даты, реализовав один System.out.println(): 21/05/2018 13:11:12 (dd / мм / yyyy HH:mm:ss), независимо от формата, с которым получается String, который создаст дату.

Я использую классы

import java.util.Date;

import java.text.DateFormat;

java.text.SimpleDateFormat;

чтобы его форматировать правильно, и я использую эту форму, с датой с единственным конкретным форматом (идея состоит в том, чтобы мочь интерпретировать дату, которая получает код, независимо от формата, в котором между):

SimpleDateFormat fec = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
Date date = fec.parse("2018-05-21T13:11:12");
System.out.println(DateFormat.getDateInstance().format(date));

Но он не позволяет мне создавать дату с любым форматом

2
задан 21.05.2018, 04:14
2 ответа

Не могут.

, Чтобы начинаться, "независимо от формата, который между" окончательно слишком широк. Даже, если мы ограничиваемся форматами mГЎs договорные, невозможно решать, "05/12/11" это - "5 декабря 2011" ли "12 мая 2011" o o "11 декабря 2005" или... Конвертер нуждается informaciГіn приходящая ученица, чтобы знать quГ©, значит каждый dГ-gito, что он а следовательно tГє ты показываешь его cuГЎl, это ожидаемый формат.

Естественно, когда принятая в доме информация не соответствует ожидаемому формату, она conversiГіn не удается, так как он то mГЎs безопасно.

Всегда ты можешь помещать список SimpleDateFormat с различными форматами и тестировать их до тех пор, пока один удастся. Я это не рекомендую, потому что harГЎ превращения, что пользователь не esperarГЎ. Однажды introducirГЎ "01.12.2018" и это leerГЎ в формате, снова introducirГЎ "01/13/2018" и это leerГЎ в другом.

, Если то, что ты хочешь, состоит просто "в том, чтобы смогла класться дата с или без часа", тогда - mГЎs просто. В общем recomendarГ, - чтобы использовать одну expresiГіn регулировать (он смотрит класс Pattern), чтобы оценивать, если цепь включает час или нет, и segГєn это использует SimpleDateFormat, приведенный в соответствие или aГ±ade "назначенный по умолчанию" час в конце цепи.

5
ответ дан 20.11.2019, 08:53
  • 1
    Это я temí в, но querí чтобы уверять меня, проблема приходит на уровень базы данных, в которой я ничего не могу делать, я не имею доступа. И даты внутри той же самой не даты как таковой, а цепи, с чем база данных глотает без страха, но просвета, Java - другой мир :( –  enrique manzano gil 21.05.2018, 04:43
  • 2
    Всегда ты можешь читать стоимость как цепи и они представлять такого какового, но просвет, пользователи (и ответственные лица за organizació n) deberí an знать, что не возможно доверять формату. –  SJuan76 21.05.2018, 04:46
  • 3
    Уже, идея состояла в том, чтобы видеть, если podí чтобы это предотвращать точно, но он не идет по возможности. Большое спасибо, я закрываю вопрос и даю тебе хорошую. :) –  enrique manzano gil 21.05.2018, 04:48
  • 4
    Превосходный ответ. В этих случаях, @enriquemanzanogil есть единственной solució n: нормализовать данные в базе данных almacená ndolos как колонны типа DATETIME... стойте, что стоил . situació n выдвинутая в твоем вопросе покажи, что informació n он прибыл в состояние, невозможное для того, чтобы быть поддержанным и который высоко склонный к тому, чтобы производить данные erró neos и опасные. Давайте представлять BD больницы, в которой нужно обеспечивать некими решающими лекарствами в определенных датах и системой, он запутывается. Quizá не будьте случаем, но это могут быть какие-то из следствий... –  A. Cedano 21.05.2018, 04:53

Ты можешь использовать несколько инстанций SimpleDateFormat, одних, чтобы получать даты и другие, чтобы писать их:

SimpleDateFormat parser = new SimpleDateFormat("dd-MM-yyyy'T'HH:mm:ss");
SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
Date date = parser.parse("2018-05-21T13:11:12");
System.out.println(formatter.format(date));
1
ответ дан 20.11.2019, 08:53

Теги

Похожие вопросы