2011-06-20 13 views
13

en Java, cómo analizar una cadena de fecha que contiene una letra que no representa un patrón?java SimpleDateFormat

 
"2007-11-02T14:46:03+01:00" 
 
String date ="2007-11-02T14:46:03+01:00"; 
String format = "yyyy-MM-ddTHH:mm:ssz"; 
new SimpleDateFormat(format).parse(date); 

Exception in thread "main" java.lang.IllegalArgumentException: Illegal pattern character 'T' 
    at java.text.SimpleDateFormat.compile(SimpleDateFormat.java:769) 
    at java.text.SimpleDateFormat.initialize(SimpleDateFormat.java:576) 
    at java.text.SimpleDateFormat.(SimpleDateFormat.java:501) 
    at java.text.SimpleDateFormat.(SimpleDateFormat.java:476) 
+1

Tenga en cuenta que la pregunta sobre el análisis de fechas ISO 8601 es una pregunta frecuente y contestada. Busque "Java ISO 8601 date" o algo similar y encontrará muchas respuestas. – Jesper

+0

Por ejemplo: http://stackoverflow.com/questions/6279647/converting-a-string-to-date-almost-done/6280206#6280206 – Jesper

Respuesta

5

El tiempo que estamos tratando de analizar parece estar en ISO 8601 format. SimpleDateFormat lamentablemente no admite todos los mismos especificadores de zona horaria como ISO 8601. Si desea poder manejar correctamente todos los formularios especificados en el ISO, lo mejor que puede hacer es usar Joda time.

Este ejemplo es directamente de la user guide:

DateTime dt = new DateTime("2004-12-13T21:39:45.618-08:00"); 
+0

esto no funciona, +01: 00 debe ser +0100 para que joda funcione. – user775187

+1

@user: tienes razón, a la versión ISO no le gustan los dos puntos. Una buena noticia es que puede pasar la versión con dos puntos al constructor 'DateTime'. –

19

Usted puede intentar

String format = "yyyy-MM-dd'T'HH:mm:ssz"; 

Referencia: desde Javadoc

texto puede ser citado el uso de comillas simples (') para evitar una interpretación.

+1

Funciona solo si la cadena contiene 'GMT'. Justo como esto: String date = "2007-11-02T14: 46: 03GMT + 01: 00"; –

+0

@Hendra que es verdadero o tiene que ser 'String date =" 2007-11-02T14: 46: 03 + 0100 ";' 'SimpleDateTime' es bastante limitado en tales situaciones y supongo que si (OP) no lo hace t tiene mucho control sobre la entrada, usando bibliotecas como el tiempo joda funcionaría mejor. –

0
String testDate = "2007-11-02T14:46:03+01:00"; 
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssz"); 
Date date = formatter.parse(testDate); 
System.out.println(date); 

Usted puede intentar similar a la anterior

permite utilizar las siguientes link para referencia

+0

no, esto arroja ParseException – user775187

0

Si no se preocupan por el huso horario, puede utilizar este método.

public static Date convertToDate(String strDate) throws ParseException { 
    Date date = null; 
    if (strDate != null) { 
     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); 
     date = sdf.parse(strDate); 
    } 
    return date; 
    } 

No sé si todavía es útil para usted, pero me encuentro con el mismo problema ahora, y después de un poco me ocurre esto.

Cuestiones relacionadas