Después de consultar con especialistas en este tema, programadores de diversas áreas y maestros dimos con la respuesta a la cuestión y la dejamos plasmada en este post.
Solución:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
SimpleDateFormat output = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d = sdf.parse(time);
String formattedTime = output.format(d);
Esto funciona. Tienes que usar dos SimpleDateFormats, uno para entrada y otro para salida, pero te dará justo lo que quieres.
java.tiempo
Tenemos nueva tecnología para este problema: el marco java.time integrado en Java 8 y versiones posteriores.
Tu aportación string está en el formato estándar ISO 8601. Ese estándar se usa de forma predeterminada en las clases java.time para analizar/generar representaciones textuales de valores de fecha y hora.
OffsetDateTime odt = OffsetDateTime.parse( "2012-10-01T09:45:00.000+02:00" );
Su pregunta sugiere que desea truncar a un segundo completo.
OffsetDateTime odtTruncatedToWholeSecond = odt.truncatedTo( ChronoUnit.SECONDS );
Parece que desea omitir la información de desplazamiento y zona horaria. El formateador predefinido DateTimeFormatter.ISO_LOCAL_DATE_TIME
hace eso.
Y aparentemente desea usar un espacio en el medio en lugar del estándar T
. Podrías definir tu propio formateador para esto, pero yo solo haría un string Manipulación para reemplazar el T
con un ESPACIO.
String output = odtTruncatedToWholeSecond.format( DateTimeFormatter.ISO_LOCAL_DATE_TIME ).replace( "T" , " " );
Simplemente manipulaciones de cadenas
Como sugieren los comentarios sobre la Pregunta, estrictamente hablando, puede lograr su objetivo trabajando solo con cadenas y sin convertir a ningún objeto de fecha y hora. Pero proporciono esta Respuesta aquí asumiendo que puede tener otra lógica comercial para trabajar con estos valores de fecha y hora.
Sobre java.tiempo
los java.tiempo framework está integrado en Java 8 y versiones posteriores. Estas clases reemplazan a las antiguas y problemáticas clases heredadas de fecha y hora, como java.util.Date
, Calendar
& SimpleDateFormat
.
los Joda-Tiempo El proyecto, ahora en modo de mantenimiento, aconseja la migración a las clases java.time.
Para obtener más información, consulte la Tutorial de oráculo. Y busque Stack Overflow para obtener muchos ejemplos y explicaciones. La especificación es JSR 310.
puedes intercambiar java.tiempo objetos directamente con su base de datos. Utilice un controlador JDBC compatible con JDBC 4.2 o posterior. No hay necesidad de cuerdas, no hay necesidad de java.sql.*
clases
¿Dónde obtener las clases java.time?
- Java SE 8, Java SE 9y después
- Incorporado.
- Parte de la API de Java estándar con una implementación integrada.
- Java 9 agrega algunas características y correcciones menores.
- Java SE 6 y Java SE 7
- Gran parte de la funcionalidad de java.time está adaptada a Java 6 y 7 en ThreeTen-Backport.
- Androide
- Versiones posteriores de implementaciones de paquetes de Android de las clases java.time.
- Para Android anterior, el TresDiezABP el proyecto se adapta ThreeTen-Backport (mencionado anteriormente). Ver Cómo usar ThreeTenABP….
los ThreeTen-Extra proyecto extiende java.time con clases adicionales. Este proyecto es un campo de pruebas para posibles adiciones futuras a java.time. Puede encontrar algunas clases útiles aquí, como Interval
, YearWeek
, YearQuarter
y más.
Gooye, si es posible usar Joda Time en su proyecto, entonces este código funciona para mí:
String dateStr = "2012-10-01T09:45:00.000+02:00";
String customFormat = "yyyy-MM-dd HH:mm:ss";
DateTimeFormatter dtf = ISODateTimeFormat.dateTime();
LocalDateTime parsedDate = dtf.parseLocalDateTime(dateStr);
String dateWithCustomFormat = parsedDate.toString(DateTimeFormat.forPattern(customFormat));
System.out.println(dateWithCustomFormat);
Te mostramos las reseñas y valoraciones de los lectores
Si crees que ha sido de utilidad nuestro post, nos gustaría que lo compartas con el resto desarrolladores y nos ayudes a extender este contenido.