2008-09-16 14 views
5

No se puede entender por qué ocurre lo siguiente:Date.getTime() sin incluir el tiempo?

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? 
+0

¡No hay segundos tampoco, porque no ha dado ninguno en la fecha! –

+0

Uhm, los veo allí, los últimos tres 0's. Los has establecido en 0 implícitamente. –

Respuesta

20

¿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); 
+0

¡No hay segundos ni minutos u horas tampoco! getTime() devuelve solo el entero largo que representa la fecha desde la hora 00:00:00. No hay posibilidad de analizar segundos: simplemente no están presentes en mis datos. =) – Jake

+1

¿Por qué no abre una nueva pregunta con su código real y un poco de datos de muestra si esto no ha resuelto su duda? Supongo que tu problema podría estar en otro lado. –

+0

1180955100000 contiene un componente de hora y minuto como se esperaría. Deberías aceptar la respuesta de Vinko. – ScArcher2

2

de acuerdo con lo anterior, no debe haber ningún milisegundo. . .

2

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 se le asigna un valor con milisegundos (en este caso, utilizando la nueva fecha()). Entonces, cuando los imprime, también contiene los milisegundos.

0

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

Al crear un nuevo objeto de fecha se devuelve la fecha/hora actual del sistema (cantidad de milisegundos desde la época).

0

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

Así new Date() es un objeto con una resolución de milisegundo, como puede verse por:

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

sin embargo, cuando usted construye su día con SimpleDateFormat, no hay milisegundos se pasan a ella

estoy pasando por alto la pregunta aquí?

[editar] Jajaja ... demasiado lento;)

0

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, utiliza 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, date.getTime más que probable que devolver un número que no es divisible por 1000.

0

El método de la DategetTime() devuelve el número de milisegundos desde el 1 Enero 1970 (esta fecha es llamada la "época" porque todos las fechas de la computadora se basan a partir de esta fecha). Debería usarse no para mostrar una versión legible para humanos de su Fecha.

En su lugar, utilice el método SimpleDateFormat.format().Aquí es 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 
2

En lugar de utilizar los/Fecha bibliotecas de Sun JDK tiempo (que dejan mucho que desear) Yo 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.

0
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); 
    } 
} 
Cuestiones relacionadas