2013-11-15 3 views
0

Я пытаюсь преобразовать указанную ниже дату в yyyMMdd, используя приведенный ниже код.Получение исключения при преобразовании дат в Java

String dateString = "1st August 2012"; 
SimpleDateFormat simp_date=new SimpleDateFormat("yyyyMMdd"); 
    try 
    { 
     dateString=simp_date.format(new Date(dateString)); 
    } 
    catch(Exception e) 
    { 
     e.printStackTrace(); 
    } 

Я получаю снизу от экскрементов.

IllegalArgumentException

Может кто-нибудь помочь мне? Заранее спасибо.

+0

shoudln't дата должна быть в том же формате, что была создана в конструкторе SimpleDateFormat? –

+0

@PrasadKharkar Он хочет отформатировать эту дату в данном формате. Ему скорее нужен другой экземпляр SimpleDateFormat для разбора даты dateString –

+0

«1 августа 2012». Отбросьте «st». –

ответ

1

Попробуйте этот приятель

java.util.Date ss1=new Date("Sat Dec 01 00:00:00 GMT 2012"); 
SimpleDateFormat formatter5=new SimpleDateFormat("yyyy-MM-dd"); 
String formats1 = formatter5.format(ss1); 
System.out.println(formats1); 
0

Используйте этот код String date = DateFormat.getDateTimeInstance(2, 2, Locale.US).format(new Date());

Выход будет 15 ноября, 2013 2:06:00 PM

3

Прежде всего, вы не должны использовать конструктор Date(String), поскольку он устарел. Здесь вам нужно сначала проанализировать строку даты, используя формат, чтобы преобразовать его в объект Date, а затем отформатировать этот объект Date в требуемом формате.

Следующий код будет работать:

String dateString = "1st August 2012"; 

// Format for parsing the dateString 
SimpleDateFormat parser = new SimpleDateFormat("d'st' MMM yyyy"); 

// To format the resultant Date object to new String format 
SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd"); 

try { 
    dateString = formatter.format(parser.parse(dateString)); 

} catch(Exception e) { 
    e.printStackTrace(); 
} 

System.out.println(dateString); 

Я хотел бы предложить вам перейти к JodaTime, гораздо мощный DateTime API, чем в Java Date и Calendar. Вы будете удивлены, насколько легко работать с датами. На самом деле Java 8 вводит совершенно новый API datetime, основанный только на JodaTime.

+0

Большое спасибо Rohit. Я проверю новый API. – Technocrat

+0

есть способ, которым я могу сделать этот код более общим, вместо того, чтобы передавать «d'st» MMM yyyy », который должен работать на все даты (например, 2-й, 3-й и 4-й)? – Technocrat

+0

@Technocrat Нет, это невозможно. Вы должны поддерживать массив различных форматов данных и попробовать каждый из них в цикле. –

0

Я не проверял, но я немного модифицирована Рохит в код:

Можете ли вы проверить следующий код? Pls ...

public static void main(String[] args) { 
    String[] s1 = {"st", "nd", "rd", "th"}; 
    String dateString = "1st August 2012"; 
    for (Object obj : s1) { 
     SimpleDateFormat parser = new SimpleDateFormat("d'" + obj + "' MMM yyyy"); 
     SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd"); 
     try { 
      dateString = formatter.format(parser.parse(dateString)); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
    System.out.println("Expected OutPut:::" + dateString); 
} 
Смежные вопросы