2012-03-22 16 views
10

Recibo el error más extraño al intentar analizar una cadena como un calendario. Parece que estropea el objeto Date que utilizo para establecer el tiempo del calendario de resultados. El error es bastante inconsistente (o no veo lógica en ello). ¿Alguien puede señalar lo que podría estar haciendo mal?Obteniendo datos incorrectos al usar SimpleDateFormat.parse()

public class caltest{ 
public static final SimpleDateFormat sdf = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss.SSS"); 

public static void main(String[] args) { 
    String date1 = "1992-03-11 12:00:12.123"; 
    String date2 = "1993-03-11 12:00:12.123"; 
    String date3 = "1994-03-11 12:00:12.123"; 
    String date4 = "1995-03-11 12:00:12.123"; 
    parseStringAsCalendar(date1); 
    parseStringAsCalendar(date2); 
    parseStringAsCalendar(date3); 
    parseStringAsCalendar(date4); 
} 
public static String calendarToString(Calendar cal) { 
    return sdf.format(cal.getTime()); 
} 

public static Calendar parseStringAsCalendar(String s) { 
    Date time = null; 
    try { 
     time = sdf.parse(s); 
    } catch (ParseException e) { 
     System.out.println("Exception"); 
     e.printStackTrace(); 
    } 
    System.out.println(time.toString()); 
    GregorianCalendar ret = new GregorianCalendar(); 
    ret.setTime(time); 

    return ret; 
} 

}

La salida es:

Sun Dec 29 12:00:12 CET 1991 
Sun Dec 27 12:00:12 CET 1992 
Sun Dec 26 12:00:12 CET 1993 
Sun Jan 01 12:00:12 CET 1995 

Respuesta

18

Estás usando YYYY en su especificador de formato, que es el año semana (a partir de Java 7, creo). Quiere yyyy, que es solo "año". (Consulte SimpleDateFormat documentation.)

Sospecho que el resto de la fecha no estaba disponible porque también intentó especificar el mes y el día, que en realidad no son "características" en el año de la semana ... si había especificado la "semana de la semana del año" y el día de la semana, podría haber dado algunos resultados más sensibles, pero sólo si realmente quería decir usar años la semana, lo cual dudo :)

+0

Ambas respuestas fueron muy útiles, éste brilla más de una luz en el problema subyacente. Estaba revisando la documentación incorrecta. – Tegi

+3

¡me acabas de salvar de varias horas de búsqueda infructuosa en Internet! gracias – KoW

+0

¿Cuál es exactamente la diferencia entre * año * y * semana año *? La documentación es un poco escasa en esta distinción (como es la documentación para el Calendario). – tytk

3

utilice esta:

public static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); 

Es minúscula y por año, no en mayúsculas Y. Con eso, el resultado es:

Wed Mar 11 12:00:12 EST 1992 
Thu Mar 11 12:00:12 EST 1993 
Fri Mar 11 12:00:12 EST 1994 
Sat Mar 11 12:00:12 EST 1995 

Ver aquí:

Cuestiones relacionadas