Ваш шаблон синтаксического анализа неверен.Это не соответствует представлению строки даты.MMM
обозначает трехбуквенное локализованное сокращение месяца, в то время как у вас есть двухзначный номер месяца в фактической дате, вам нужно MM
.Вы также добавляете в качестве разделителя дату / месяц / год /
, а не -
.Для маркера AM / PM вам также понадобится a
впоследствии, чтобы можно было проанализировать правое hh
.
Это должно работать:
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss a");
Для объяснения этих шаблоновпрочитайте SimpleDateFormat
javadoc .
Я считаю, что вашим конкретным функциональным требованием является преобразование заданной строки даты, указанной шаблоном MM/dd/yyyy hh:mm:ss a
, в другой формат строки даты, как указано в шаблоне MMM-dd-yyyy hh:mm:ss
.В этом случае у вас должно быть два экземпляра SimpleDateFormat
, один из которых разбирает строку в данном шаблоне на Date
, а другой - форматирует проанализированный Date
для данного шаблона.Это должно делать то, что вы хотите:
String inputDate = "07/28/2011 11:06:37 AM";
Date date = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss a").parse(inputDate);
String outputDate = new SimpleDateFormat("MMM-dd-yyyy HH:mm:ss").format(date);
System.out.println(outputDate); // Jul-28-2011 11:06:37
Обратите внимание, что я изменил hh
в выводе на HH
, потому что в противном случае он получился бы в 1-12 часовом представлении без anAM / PM маркер.HH
представляет 0-23 часа.