2012-05-18 11 views
26

Ho Data in questo formato (2012-11-17T00: 00: 00.000-05: 00). Ho bisogno di convertire la data in questo formato mm/aaaa.Java: impossibile formattare l'oggetto dato come data

Ho provato in questo modo, ma sto ottenendo questa eccezione.

Exception in thread "main" java.lang.IllegalArgumentException: Cannot format given Object as a Date 
    at java.text.DateFormat.format(Unknown Source) 
    at java.text.Format.format(Unknown Source) 
    at DateParser.main(DateParser.java:14) 

Si prega di vedere il mio codice qui sotto:

import java.text.SimpleDateFormat; 
import java.util.Date; 

public class DateParser {  
    public static void main(String args[]) { 
     String MonthYear = null;  
     SimpleDateFormat simpleDateFormat = new SimpleDateFormat("mm/yyyy");  
     String dateformat = "2012-11-17T00:00:00.000-05:00 
     MonthYear = simpleDateFormat.format(dateformat);  
     System.out.println(MonthYear);  
    }  
} 
+1

Il 'SimpleDateFormat # format' richiedono un' date' esempio, non 'STRING'. Quindi dovresti prima convertire la stringa in 'Date' di' SimpleDateFormat # parse'. –

risposta

52

DateFormat.format funziona solo su Date valori.

È necessario utilizzare due oggetti SimpleDateFormat: uno per l'analisi e uno per la formattazione. Per esempio:

// Note, MM is months, not mm 
DateFormat outputFormat = new SimpleDateFormat("MM/yyyy"); 
DateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSX"); 

String inputText = "2012-11-17T00:00:00.000-05:00"; 
Date date = inputFormat.parse(inputText); 
String outputText = outputFormat.format(date); 

EDIT: Si noti che si potrebbe voler specificare il fuso orario e/o locale nei vostri formati, e si dovrebbe anche considerare l'utilizzo Joda Time invece di tutto questo per cominciare - è un'API data/ora molto migliore.

+0

La tua risposta sembra buona della mia, ho ancora una domanda, come posso ottenere solo la Data (2012-11-17T00: 00: 00.000-05: 00) che è 17 da questo ?? – Pawan

+0

@ yyyi777: come una stringa o come valore intero? –

+0

Solo una stringa – Pawan

4

Hai un DateFormat, ma avete bisogno di due: uno per l'input, e un altro per l'uscita.

Ne hai uno per l'output, ma non vedo nulla che corrisponda al tuo input. Quando assegni la stringa di input al formato di output, non sorprende che tu veda quell'eccezione.

DateFormat inputDateFormat = new SimpleDateFormat("yyyy-MM-ddhh:mm:ss.SSS-Z"); 
4

SimpleDateFormat.format(...) prende una data come parametro e formatta da Data a stringa. Quindi è necessario avere un'API sguardo attentamente

1

ho deciso che, in questo modo

import java.text.DateFormat; 
import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Date; 
import java.util.Locale; 

public class DateParser { 

    public static void main(String args[]) throws Exception { 

     DateParser dateParser = new DateParser(); 

     String str = dateParser.getparsedDate("2012-11-17T00:00:00.000-05:00"); 
     System.out.println(str); 
    } 


    private String getparsedDate(String date) throws Exception { 
     DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.US); 
     String s1 = date; 
     String s2 = null; 
     Date d; 
     try { 
      d = sdf.parse(s1); 
      s2 = (new SimpleDateFormat("MM/yyyy")).format(d); 

     } catch (ParseException e) { 

      e.printStackTrace(); 
     } 

     return s2; 

    } 

} 
0
public static String showDate(){ 
    SimpleDateFormat df=new SimpleDateFormat("\nTime:yyyy-MM-dd HH:mm:ss"); 
    System.out.println(df.format(new Date())); 
    String s=df.format(new Date()); 
    return s; 
} 

Penso che questo codice potrebbe risolvere il problema.

0

questo ha funzionato per me:

String dat="02/08/2017"; 
long date=new SimpleDateFormat("dd/MM/yyyy").parse(dat,newParsePosition(0)).getTime(); 
java.sql.Date dbDate=new java.sql.Date(date); 
System.out.println(dbDate); 
Problemi correlati