2010-12-21 40 views
100

¿Cómo analizo la cadena de fecha a continuación en un objeto Date?Cómo analizar la cadena de fecha hasta la fecha?

String target = "Thu Sep 28 20:29:30 JST 2000"; 
DateFormat df = new SimpleDateFormat("E MM dd kk:mm:ss z yyyy"); 
Date result = df.parse(target); 

ha producido una excepción ...

java.text.ParseException: Unparseable date: "Thu Sep 28 20:29:30 JST 2000" 
     at java.text.DateFormat.parse(DateFormat.java:337) 
+1

clases de fecha y hora para tu información, la problemática antiguos, como ['java.util.Date'] (https://docs.oracle.com/javase/8/docs/api/java/util/Date.html), [' java.util.Calendar'] (https: //docs.oracle.com/javase/8/docs/api/java/util/Calendar.html), y 'java.text.SimpleTextFormat' ahora son [legacy] (https://en.wikipedia.org/wiki/Legacy_system), suplantado por las clases [java.time] (https://docs.oracle.com/javase/8/docs/api/java/time/package-summary.html). Consulte [Tutorial de Oracle] (https://docs.oracle.com/javase/tutorial/datetime/TOC.html). –

Respuesta

157

El patrón es erróneo. Tiene una abreviatura de día de 3 letras, por lo que debe ser EEE. Tiene una abreviatura de tres letras, por lo que debe ser MMM. Como esas abreviaturas de día y de mes son sensibles a la configuración regional, también le gustaría especificar explícitamente la configuración regional SimpleDateFormat en inglés, de lo contrario, utilizará la configuración regional predeterminada de la plataforma, que puede no ser en sí inglés.

public static void main(String[] args) throws Exception { 
    String target = "Thu Sep 28 20:29:30 JST 2000"; 
    DateFormat df = new SimpleDateFormat("EEE MMM dd kk:mm:ss z yyyy", Locale.ENGLISH); 
    Date result = df.parse(target); 
    System.out.println(result); 
} 

esto aquí

Thu Sep 28 07:29:30 BOT 2000

impresiones que es correcta según mi zona horaria.

También lo reconsideraría si no quisiera utilizar HH en lugar de kk. Lea el javadoc para obtener detalles sobre patrones válidos.

+0

No, sigue arrojando el mismo error, lo he intentado con zzz también y sin suerte. Voy a verificar el documento ahora, gracias por el enlace. –

+1

Funciona bien aquí (después de eliminar 'String' de su segunda línea de código). Tu problema está en otro lado. – BalusC

+0

mmm bien, quitaré la "cuerda", pero aún no funciona en mi local, mirando a otros lugares ahora ... interesante ... –

12

Aquí es un ejemplo de trabajo:

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

public class j4496359 { 
    public static void main(String[] args) { 
     try { 
      String target = "Thu Sep 28 20:29:30 JST 2000"; 
      DateFormat df = new SimpleDateFormat("EEE MMM dd kk:mm:ss zzz yyyy"); 
      Date result = df.parse(target); 
      System.out.println(result); 
     } catch (ParseException pe) { 
      pe.printStackTrace(); 
     } 
    } 
} 

imprimirá:

Thu Sep 28 13:29:30 CEST 2000 
+2

Ya lo he intentado ...no funcionó :( –

+0

actualicé mi publicación con el código probado;) – miku

+0

Gracias por incluir las importaciones correspondientes. –

6
new SimpleDateFormat("EEE MMM dd kk:mm:ss ZZZ yyyy"); 

y

new SimpleDateFormat("EEE MMM dd kk:mm:ss Z yyyy"); 

todavía funciona. Sin embargo, si su código arroja una excepción, es porque su herramienta o jdk o cualquier otra razón. Debido llegué mismo error en mi IDE pero por favor comprobar estos http://ideone.com/Y2cRr (IDE en línea) con ZZZ y con Z

salida es: Thu Sep 28 11:29:30 GMT 2000

+0

Tiene razón, mi IDE que es NetBean3.9 y ejecuta exactamente el mismo código arroja un error mientras IDE en línea no lo hace. –

+0

También tuve el mismo problema. Sé que esta sensación :) código correcto pero resultado incorrecto. actualice su jdk no habrá ningún problema –

3

tuve este problema, y ​​me puse la Locale-US, a continuación, funciona.

static DateFormat visitTimeFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy",Locale.US); 

para String"Sun Jul 08 00:06:30 UTC 2012"

+0

Tuve que configurar el Locale.US también para el nuevo SimpleDateFormat ("EEE MMM dd HH: mm: ss Z aaaa", Locale.US) para analizar "Mié Jan 25 11:13:11 +0100 2012 " – OneWorld

7
String target = "27-09-1991 20:29:30"; 
DateFormat df = new SimpleDateFormat("dd MM yyyy HH:mm:ss"); 
Date result = df.parse(target); 
System.out.println(result); 

Esto funciona bien?

+7

Creo que quisiste decir:" dd-MM-aaaa HH: mm: ss " – Sergio

0

A excepción de análisis es una excepción comprobada, por lo que hay que cogerlo con un try-catch cuando se trabaja con cadenas de análisis a fechas, como sugirió @miku ...

Cuestiones relacionadas