Java - конструктор даты принимает строку даты, но не рекомендуется.Пробовал альтернативы, но не повезло - PullRequest
4 голосов
/ 29 июля 2011
String temp_date="07/28/2011 11:06:37 AM";  
Date date = new Date(temp_date); //Depricated 
SimpleDateFormat sdf = new SimpleDateFormat("MMM-dd-yyyy hh:mm:ss"); 
String comp_date= sdf.format(date);
System.out.println(comp_date);

Это работает, но если я использую что-то вроде этого

String temp_date="07/28/2011 11:06:37 AM";  
try{  
    SimpleDateFormat sdf = new SimpleDateFormat("MMM-dd-yyyy hh:mm:ss"); 
    Date comp_date= sdf.parse(temp_date);
    System.out.println(comp_date);
}catch(Exception e){
    System.out.println(e);
}

Это исключение выдается:

java.text.ParseException: Unparseable date: "07/28/2011 11:06:37 AM"

Ответы [ 3 ]

11 голосов
/ 29 июля 2011

Ваш шаблон синтаксического анализа неверен.Это не соответствует представлению строки даты.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 часа.

1 голос
/ 29 июля 2011

На первый взгляд, похоже, что ваша строка формата неверна.

МММ - Вы указали это за месяц, но не проходите месяц с 3 знаками.

Попробуйте MM и посмотрите, поможет ли это.

Посмотрите на это для дополнительной информации о формате даты:

http://www.java2s.com/Tutorial/Java/0040__Data-Type/SimpleDateFormat.htm

1 голос
/ 29 июля 2011

Формат, который вы указали в SimpleDateFormat, использует - между месяцем, датой и годом.Ваша строка использует косую черту.

...