2012-05-18 24 views
26

Tengo la fecha en este formato (2012-11-17T00: 00: 00,000-05: 00). Necesito convertir la fecha en este formato mm/aaaa.Java: no se puede formatear el objeto dado como una fecha

Lo intenté de esta manera, pero estoy recibiendo esta excepción.

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) 

Por favor, vea mi código de abajo:

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

El 'SimpleDateFormat # format' requiere una' date' ejemplo, no 'string'. Por lo tanto, primero debe convertir la cadena a 'Fecha' mediante' SimpleDateFormat # analisis'. –

Respuesta

52

DateFormat.format sólo funciona en Date valores.

Debe usar dos objetos SimpleDateFormat: uno para el análisis y otro para el formateo. Por ejemplo:

// 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: Tenga en cuenta que es muy posible que desee especificar la zona horaria y/o local en sus formatos, y usted debe también considerar el uso de Joda Time en lugar de todo esto para empezar - es una API de fecha/hora mucho mejor.

+0

Su respuesta se ve mejor que la mía, tengo una pregunta más, ¿cómo puedo obtener solo la fecha (2012-11-17T00: 00: 00.000-05: 00) que es 17 a partir de esto? – Pawan

+0

@ yyyi777: ¿Como una cadena, o como un valor entero? –

+0

Como una cadena solamente – Pawan

4

Tienes una DateFormat, pero necesita dos: una para la entrada, y otro para la salida.

Tiene una para la salida, pero no veo nada que coincida con su entrada. Cuando le das la cadena de entrada al formato de salida, no es sorprendente que veas esa excepción.

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

SimpleDateFormat.format(...) toma una fecha como parámetro y formatea la fecha a la cadena. Por lo que necesita tener un aspecto cuidado API

1

he resuelto que, de esta manera

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; 
} 

Creo que este código puede resolver su problema.

0

Esto funcionó para mí:

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); 
Cuestiones relacionadas