2011-04-13 6 views
6

Quiero el formato de fecha como dd-MMM-aaaa. Mi código es:recibí el error java.text.ParseException: fecha indescifrable

String v_date_str="Sun Mar 06 11:28:16 IST 2011"; 
     DateFormat formatter; 
     formatter = new SimpleDateFormat("dd-MMM-yyyy"); 
     Date date_temp=null; 
     try { 
      date_temp = (Date) formatter.parse(v_date_str); 
     } catch (ParseException ex) { 
      Logger.getLogger(Attendance_Calculation.class.getName()).log(Level.SEVERE, null, ex); 
     } 
     System.out.println("output: "+date_temp); 

Pero, tengo el error como:

The log message is null. 
java.text.ParseException: Unparseable date: "Sun Mar 06 11:28:16 IST 2011" 
     at java.text.DateFormat.parse(DateFormat.java:337) 
     at org.fes.pis.jsf.main.Attendance_Calculation.btn_show_pending_appl_action(Attendance_Calculation.java:415) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
     at java.lang.reflect.Method.invoke(Method.java:597) 
     at com.sun.el.parser.AstValue.invoke(AstValue.java:187) 
     at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:297) 
     at com.sun.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:68) 
     at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:99) 
     at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88) 
     at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:771) 
     at javax.faces.component.UICommand.broadcast(UICommand.java:372) 
     at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:475) 
     at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:756) 
     at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82) 
     at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100) 
     at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) 
     at com.sun.faces.extensions.avatar.lifecycle.PartialTraversalLifecycle.execute(PartialTraversalLifecycle.java:94) 
     at javax.faces.webapp.FacesServlet.service(FacesServlet.java:265) 
     at org.apache.catalina.core.ApplicationFilterChain.servletService(ApplicationFilterChain.java:427) 
     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:315) 
     at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:287) 
     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:218) 
     at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:648) 
     at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:593) 
     at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:94) 
     at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:98) 
     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:222) 
     at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:648) 
     at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:593) 
     at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:587) 
     at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1093) 
     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:166) 
     at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:648) 
     at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:593) 
     at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:587) 
     at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1093) 
     at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:291) 
     at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdapter(DefaultProcessorTask.java:666) 
     at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcess(DefaultProcessorTask.java:597) 
     at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.process(DefaultProcessorTask.java:872) 
     at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.executeProcessorTask(DefaultReadTask.java:341) 
     at com.sun.enterprise.web.connector.grizzly.ssl.SSLReadTask.process(SSLReadTask.java:444) 
     at com.sun.enterprise.web.connector.grizzly.ssl.SSLReadTask.doTask(SSLReadTask.java:230) 
     at com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:264) 
     at com.sun.enterprise.web.connector.grizzly.ssl.SSLWorkerThread.run(SSLWorkerThread.java:106) 

Gracias por cualquier ayuda ....

Pero, quiero la fecha en formato de fecha como dd -MMM-aaaa.

+0

obtuve la solución como, Cadena v_date_str = "Dom Mar 06 11:28:16 IST 2011"; Formateador de formato de fecha; formateador = new SimpleDateFormat ("EEE MMM d HH: mm: ss zzz yyyy"); Fecha date_temp = null; Cadena d_temp = null; SimpleDateFormat dateFormat = new SimpleDateFormat ("dd-MMM-yyyy"); try { date_temp = (Fecha) formatter.parse (v_date_str); d_temp = dateFormat.format (date_temp); System.out.println ("val:" + d_temp); } catch (ParseException ex) {// } – Annu

Respuesta

5

Debe cambiar el código para:

String v_date_str="Sun Mar 06 11:28:16 IST 2011"; 
DateFormat formatter; 
formatter = new SimpleDateFormat("EEE MMM d HH:mm:ss zzz yyyy"); 
Date date_temp=null; 
try { 
     date_temp = (Date) formatter.parse(v_date_str); 
    } catch (ParseException ex) { 
    Logger.getLogger(Attendance_Calculation.class.getName()).log(Level.SEVERE, null, ex); 
} 
System.out.println("output: "+date_temp); 

Está utilizando el formato de fecha incorrecta para analizar la fecha.

+0

Estás equivocado. java.text.SimpleDateFormat es una subclase de java.text.DateFormat, el código funciona perfectamente. –

7

Utilice esta va a trabajar:

SimpleDateFormat formatter=new SimpleDateFormat("EEE MMM d HH:mm:ss zzz yyyy"); 

Usted no puede analizar una cita con una SimpleDateFormat que está configurado con un formato diferente

+0

Pero vea mi respuesta: simplemente haciendo ese cambio no se imprimirá la fecha como se desee. –

+0

No se puede analizar la fecha con diferentes formatos. –

+0

¿qué quieres decir?Me refería a utilizar un SimpleDateFormat para el análisis sintáctico y otro diferente para la impresión. –

3

En este código le está diciendo a Java para analizar la fecha usando el formato dado, y luego imprimirlo. La cadena de formato que utiliza debe, por lo tanto, coincidir con el formato de la cadena de fecha de entrada. Como no es así, no es sorprendente que no funcione.

Para convertir fechas entre dos formatos diferentes, probablemente desee utilizar dos diferentes objetos de DateFormat, uno para el análisis sintáctico y otro para la impresión.

2

Prueba el siguiente código:

import java.text.DateFormat; 
import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Date; 
import java.util.Locale; 
import java.util.logging.Level; 
import java.util.logging.Logger; 


public class SimpleDateFormat02 { 

public static void main(String[] args) throws ParseException { 
    String v_date_str="Sun Mar 06 11:28:16 IST 2011"; 
    Date v_date = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.ENGLISH).parse(v_date_str); 
    DateFormat formatter = null; 

    formatter = new SimpleDateFormat("dd-MMM-yyyy"); 
    Date date_temp=null; 
    try { 
     date_temp = (Date) formatter.parse("31-Dec-2012"); // String of same format a formatter 

    } catch (ParseException ex) { 
     //Logger.getLogger(Attendance_Calculation.class.getName()).log(Level.SEVERE, null, ex); 
     ex.printStackTrace(); 
    } 
    System.out.println("output: "+ formatter.format(v_date)); 
} 
} 

Ésta le da el resultado deseado!

-1

tengo la solución como,

String v_date_str = "Sun Mar 06 11:28:16 IST 2011"; 
    DateFormat formatter = new SimpleDateFormat("EEE MMM d HH:mm:ss zzz yyyy"); 
    String d_temp; 
    Date dTemp; 
    try { 
     dTemp = formatter.parse(v_date_str); 
     formatter=new SimpleDateFormat("dd-MMM-yyyy"); 
     d_temp=formatter.format(dTemp); 
     System.out.println("val : " + d_temp); 
    } catch (ParseException ex) { 
    } 
+0

No creo que puedas usar DateFormat formatter = new SimpleDateFormat, es un error de Tipos incompatibles. – Nizzy

+0

@Nizzy Podemos usar eso. Solo prueba mi código con clase java simple. – Annu

0

Esto funciona muy bien conmigo

SimpleDateFormat formato1 = new SimpleDateFormat ("dd-mm-aaaa");

Cadena formatted = format1.format (objectValue);
Fecha javaDate = format1.parse (formateado);

Cuestiones relacionadas