examples example ejemplo java date timestamp gettime

ejemplo - timestamp java format example



Date.getTime() sin incluir el tiempo? (9)

No puedo entender por qué sucede lo siguiente:

String date = "06-04-2007 07:05"; SimpleDateFormat fmt = new SimpleDateFormat("MM-dd-yyyy HH:mm"); Date myDate = fmt.parse(date); System.out.println(myDate); //Mon Jun 04 07:05:00 EDT 2007 long timestamp = myDate.getTime(); System.out.println(timestamp); //1180955100000 -- where are the milliseconds? // on the other hand... myDate = new Date(); System.out.println(myDate); //Tue Sep 16 13:02:44 EDT 2008 timestamp = myDate.getTime(); System.out.println(timestamp); //1221584564703 -- why, oh, why?


¿Qué milisegundos? Está brindando solo minutos de información en el primer ejemplo, mientras que su segundo ejemplo captura la fecha actual del sistema con milisegundos, ¿qué es lo que está buscando?

String date = "06-04-2007 07:05:00.999"; SimpleDateFormat fmt = new SimpleDateFormat("MM-dd-yyyy HH:mm:ss.S"); Date myDate = fmt.parse(date); System.out.println(myDate); long timestamp = myDate.getTime(); System.out.println(timestamp);


Cuando analiza una fecha, solo utiliza la información que proporciona. En este caso, solo conoce MM-dd-aaaa HH: mm.

La creación de un nuevo objeto de fecha devuelve la fecha / hora actual del sistema (cantidad de milisegundos desde la época).


Date.getTime devuelve el número de milisegundos desde el 1 de enero de 1970, 00:00:00 GMT representado por el objeto Date. Por lo tanto, "06-04-2007 07:05" - "01-01-1970 00:00" equivale a 1180955340000 milisegundos. Como la única preocupación de su pregunta es acerca de la porción de tiempo de la fecha, una forma aproximada de pensar en este cálculo es la cantidad de milisegundos entre 07:05 y 00:00 que es 25500000. Esto es divisible uniformemente entre 1000 ya que ninguna de las dos veces tiene cualquier milisegundo.

En la segunda fecha, usa la hora actual cuando se ejecuta esa línea de código. Eso usará lo que sean los milisegundos actuales más allá del segundo actual en el cálculo. Por lo tanto, es muy probable que Date.getTime devuelva un número que no es divisible de manera uniforme entre 1000.


El método getTime() de Date devuelve el número de milisegundos desde el 1 de enero de 1970 (esta fecha se denomina "época" porque todas las fechas de la computadora se basan en esta fecha). No debe usarse para mostrar una versión legible para humanos de su Fecha.

Use el método SimpleDateFormat.format() lugar. Aquí hay una versión revisada de parte de su código que creo que puede resolver su problema:

String date = "06-04-2007 07:05:23:123"; SimpleDateFormat fmt = new SimpleDateFormat("MM-dd-yyyy HH:mm:ss:S"); Date myDate = fmt.parse(date); System.out.println(myDate); //Mon Jun 04 07:05:23 EDT 2007 String formattedDate = fmt.format(myDate); System.out.println(formattedDate); //06-04-2007 07:05:23:123


Porque el formato de fecha simple que especificó descarta los milisegundos. Entonces, el objeto Date resultante no tiene esa información. Entonces, cuando lo imprimes, es todo 0s.

Por otro lado, el objeto Date retiene los milisegundos cuando le asigna un valor con milisegundos (en este caso, usa una nueva fecha ()). Entonces, cuando los imprime, también contiene los milisegundos.


de acuerdo con lo anterior, no debería haber ningún milisegundo. . .


toString () de un objeto Date no te muestra los milisegundos ... Pero están ahí

Así que Date () nuevo es un objeto con una resolución de milisegundos, como se puede ver por:

System.out.printf( "ms = %d/n", myDate.getTime() % 1000 ) ;

Sin embargo, cuando construye su fecha con SimpleDateFormat, no se le pasan milisegundos

¿Me estoy perdiendo la pregunta aquí?

[editar] Jajaja ... demasiado lento;)


En lugar de utilizar las bibliotecas de hora / fecha de JDK de Sun (que dejan mucho que desear), recomiendo echar un vistazo a http://joda-time.sourceforge.net .

Este es un proyecto de sourceforge muy maduro y activo y tiene una API muy elegante.


import java.util.*; public class Time { public static void main(String[] args) { Long l = 0L; Calendar c = Calendar.getInstance(); //milli sec part of current time l = c.getTimeInMillis() % 1000; //current time without millisec StringBuffer sb = new StringBuffer(c.getTime().toString()); //millisec in string String s = ":" + l.toString(); //insert at right place sb.insert(19, s); //ENJOY System.out.println(sb); } }