Pregunta

Quiero guardar un objeto de fecha en una cadena legible (por ejemplo 22/10/2009 21:13:14) que también es apta para su procesamiento posterior a un objeto Date.

He intentado muchas cosas y lo mejor que pude encontrar fue utilizar DateFormater para analizar y formatear pero tiene un revés. Al dar formato a una fecha se pierde información de segundos. Traté de encontrar si hay una opción para dar formato y mostrar los segundos (incluso mejor sería que el nivel de milisegundos desde que esa es la resolución del objeto Date le permite tener) pero me quedé corto.

¿Alguna idea?

¿Fue útil?

Solución

Tome un vistazo a java.text.SimpleDateFormat

SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss.SSS");
Date dt = new Date();
String S = sdf.format(dt); // formats to 09/23/2009 13:53:28.238
Date dt2 = sdf.parse(S); // parses back

Otros consejos

SimpleDateFormat puede formatear y analizar una fecha basado en un sistema modelo muy simple que incluye milisegundos segundo y pares.

Otras respuestas son todos buenos.

Sin embargo, cuando se hace este tipo de cosas elegir un formato que tipo adecuadamente cuando se codifica como una cadena .... "aaaa / MM / dd hh: mm: ss" está muy bien. Siempre me sorprende cuando los ingenieros de software elegir un formato de fecha que no ordenar de manera obvia, conveniente.

Se ahorrará al resto de desarrolladores mucho dolor en un punto distante en el futuro - pensar en él como un buen karma: -)

Un poco fuera de tema, pero siempre me siento la necesidad de recordar a la gente que DateFormat y SimpleDateFormat no es seguro para subprocesos! La documentación de Sun afirma claramente esto, pero sigo encontrando código en la naturaleza, donde la gente se pega un SimpleDateFormat en una estática ...

ISO 8601

formato ISO 8601 .

  • Es flexible, que incluye segundos y fracción de segundo, si los hay, pero también se puede dejar fuera si son 0.
  • Es normal, por lo que cada vez más herramientas de formato y analizarlo. Gran para la serialización para el almacenamiento o el intercambio de datos.
  • Dice así 2009-10-22T21:13:14, debo decir que es bastante legible por humanos (aunque el T en el medio que indica el inicio de la parte de tiempo puede sentirse raro al principio).
  • Las cadenas separado la ropa adecuadamente, tal como se solicita en mikera otra respuesta, siempre que los años están en los cuatro dígitos intervalo de 1000 a 9999.
  • Las clases de java.time, el moderno fecha y hora de Java API, así como los de Joda tiempo de análisis ISO 8601 como su defecto, es decir, sin ningún formateador explícita, y producen el mismo formato de sus métodos toString.

Una modesta demostración de la utilización de java.time:

LocalDateTime dateTime = LocalDateTime.of(2009, 10, 22, 21, 13, 14);
String readableString = dateTime.toString();
System.out.println(readableString);
LocalDateTime parsedBack = LocalDateTime.parse(readableString);
System.out.println(parsedBack);

Esto imprime dos líneas idénticas:

2009-10-22T21:13:14
2009-10-22T21:13:14

La última llamada System.out.println() llama implícitamente toString() una vez más, así que esto no debería sorprender.

Si quieres hacerlo un poco más simple, y estar a salvo de hacer su propio DateFormat que la mayoría de otras respuestas implican, puede aprovechar el formato predeterminado en java.time.Instant :

(new Date()).toInstant.toString();
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top