Как преобразовать строку даты в правильный формат в Java? - PullRequest
0 голосов
/ 17 ноября 2009

Может кто-нибудь объяснить мне, как я могу преобразовать

2009-10-27 14: 36: 59.580250

в

27.10.2009, 14: 36 ?

Первая дата доступна в виде строки, а вторая также должна быть строкой;) До сих пор я не настолько увлекаюсь преобразованием дат в Java ...

Заранее спасибо!

Ответы [ 4 ]

8 голосов
/ 17 ноября 2009

Для этого вы можете использовать java.text.SimpleDateFormat. Первым шагом является анализ первой строки в объекте java.util.Date с использованием SimpleDateFormat на основе шаблона первой строки. Следующим шагом является форматирование полученного объекта java.util.Date в строку на основе шаблона второй строки. Например:

String datestring1 = "2009-10-27 14:36:59.580250";
Date date1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(datestring1);
String datestring2 = new SimpleDateFormat("dd.MM.yyyy HH:mm").format(date1);
System.out.println(datestring2);

Редактировать : Я удалил деталь .SSSSSS из первого шаблона, потому что она не удалась. Но, на мой взгляд, теоретически он должен был работать и с "yyyy-MM-dd HH:mm:ss.SSS" и "yyyy-MM-dd HH:mm:ss.SSSSSS", но он рассчитывает их как секунды! Я считаю это ошибочной реализацией в SimpleDateFormat. JodaTime отлично справляется с миллис / микро с этими шаблонами.

3 голосов
/ 17 ноября 2009

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

SimpleDateFormat parser = new SimpleDateFormat("yyyy-MM-dd HH:mm");
SimpleDateFormat formatter = new SimpleDateFormat("dd.MM.yyyy HH:mm");
System.out.println(formatter.format(parser.parse("2009-10-27 14:36:59.580250")));

В этом случае парсер просто игнорирует последнюю часть ": 59.580250" входной строки.

2 голосов
/ 17 ноября 2009

Оформить SimpleDateFormat . Вы можете использовать это для как синтаксического анализа, так и форматирования . Я бы предложил разобрать вышеприведенное в объект Date , используя один SimpleDateFormat, а затем отформатировать в строку, используя 2nd SimpleDateFormat.

Обратите внимание, что SimpleDateFormat страдает от проблем с многопоточностью, и поэтому, если вы используете это в многопоточной среде, либо создайте новые SimpleDateFormat, а не статические версии, либо используйте соответствующие, но поточно-ориентированные классы в Joda .

0 голосов
/ 17 ноября 2009

Помните, что когда вы делаете это, вы теряете точность.В зависимости от вашего конкретного приложения, это может иметь значение, а может и не иметь значения.

Если исходная дата уже сохранена где-то, это не проблема.Однако, если исходная дата получена из временного источника (например, потоковой передачи от какого-либо физического датчика), возможно, будет хорошей идеей сохранить временный объект Date (вывод SimpleDateFormat # parse (String)) где-нибудь.1003 *

Просто подумал, что укажу на это.

...