name - Java: excepción de fecha no analizable
java date format string (1)
Lo que básicamente estás haciendo aquí es confiar en Date#toString()
que ya tiene un patrón fijo. Para convertir un objeto de Date
Java en otro patrón de cadena legible por humanos, necesita SimpleDateFormat#format()
.
private String modifyDateLayout(String inputDate) throws ParseException{
Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z").parse(inputDate);
return new SimpleDateFormat("dd.MM.yyyy HH:mm:ss").format(date);
}
Por cierto, la excepción de "fecha no analizable" aquí solo puede ser lanzada por SimpleDateFormat#parse()
. Esto significa que el inputDate
no está en el patrón esperado "yyyy-MM-dd HH:mm:ss z"
. Probablemente deba modificar el patrón para que coincida con el patrón real de inputDate
.
Actualización: Bueno, hice una prueba:
public static void main(String[] args) throws Exception {
String inputDate = "2010-01-04 01:32:27 UTC";
String newDate = new Test().modifyDateLayout(inputDate);
System.out.println(newDate);
}
Esto imprime correctamente:
03.01.2010 21:32:27
(Estoy en GMT-4)
Actualización 2: según su edición, realmente obtuvo una ParseException
en eso. La parte más sospechosa sería la zona horaria de UTC
. ¿Es esto realmente conocido en su entorno Java? ¿Qué versión de Java y qué versión de SO estás usando? Compruebe TimeZone.getAvailableIDs()
. Debe haber una UTC
en el medio.
Al intentar transformar el formato de fecha, obtengo una excepción: fecha no analizable y no sé cómo solucionar este problema.
Estoy recibiendo una cadena que representa una fecha de evento y me gustaría mostrar esta fecha en un formato diferente en la GUI.
Lo que estaba tratando de hacer es lo siguiente:
private String modifyDateLayout(String inputDate){
try {
//inputDate = "2010-01-04 01:32:27 UTC";
Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z").parse(inputDate);
return new SimpleDateFormat("dd.MM.yyyy HH:mm:ss").format(date);
} catch (ParseException e) {
e.printStackTrace();
return "15.01.2010";
}
}
De todos modos la linea
String modifiedDateString = originalDate.toString();
es tonto Me gustaría obtener una cadena de fecha en el siguiente formato:
dd.MM.yyyy HH: mm: ss
y el ejemplo de la cadena de entrada es el siguiente:
2010-01-04 01:32:27 UTC
¿Alguien sabe cómo convertir la fecha de ejemplo (String) anterior en un formato de String dd.MM.yyyy HH: mm: ss?
¡Gracias!
Edición: arreglé el formato de fecha de entrada incorrecto pero todavía no funciona. Arriba está el método pegado y debajo está la imagen de la pantalla de la sesión de depuración.
texto alt http://img683.imageshack.us/img683/193/dateproblem.png
# Actualización corrí
String[] timezones = TimeZone.getAvailableIDs();
y hay una cadena UTC en la matriz. Es un problema extraño.
Hice un truco sucio que funciona:
private String modifyDateLayout(String inputDate){
try {
inputDate = inputDate.replace(" UTC", "");
Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(inputDate);
return new SimpleDateFormat("dd.MM.yyyy HH:mm:ss").format(date);
} catch (ParseException e) {
e.printStackTrace();
return "15.01.2010";
}
}
Pero aún así, preferiría transformar la entrada original sin cortar la zona horaria.
Este código está escrito para el teléfono Android utilizando JDK 1.6.