2011-05-13 18 views
5

Quiero analizar una cadena de fecha, pero fallo miserablemente. Para ilustrar mi problema que escribió esta sencilla prueba unitaria:SimpleDateFormatter no reconoce los meses

@Test 
public void testParseJavaDate() throws ParseException {  
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-DD_HH-mm-ss", Locale.GERMAN); 

    String inputtime = "2011-04-21_16-01-08"; 
    Date parse = sdf.parse(inputtime); 

    assertEquals(inputtime,sdf.format(parse)); 
} 

Esta prueba falla con este mensaje:

org.junit.ComparisonFailure: esperada: < 2011-0 [4] -21_16 -01-08> pero fue: < 2011-0 [1] -21_16-01-08>

que no entiendo por qué el formateador no puede analizar correctamente la fecha. ¿Tienes alguna idea?

Respuesta

6

Quiere "dd" (día de mes), no "DD" (día en el año):

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss", Locale.GERMAN); 
3

Uso d en lugar de D, como D es el 'Día en el año', por lo que la el mes está obligado a coincidir con el día 21 del año (que es en enero).

8

SimpleDateFormat sdf = new SimpleDateFormat ("aaaa-MM-dd_HH-mm-ss", Locale.GERMAN);

String inputtime = "2011-04-21_16-01-08"; 
Date parse = sdf.parse(inputtime); 

use dd en lugar de DD.

0

todo lo anterior es correcto pero u también debe utilizar 'mm' en lugar de 'MM' y viceversa porque 'M' Display minutos con un cero como sea necesario

así ur código será el siguiente

public void testParseJavaDate() throws ParseException { 
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd_HH-MM-ss", Locale.GERMAN); 

    String inputtime = "2011-04-21_16-01-08"; 
    Date parse = sdf.parse(inputtime); 

    sdf = new SimpleDateFormat("dd/mm/yyyy HH:MM:ss", Locale.GERMAN); 

    System.out.println(sdf.format(parse)); 

    assertEquals(inputtime, sdf.format(parse)); 
} 

e imprimirá

run: 21/04/2011 16:01:08 BUILD SUCCESSFUL (total time: 0 seconds)