Tenga en cuenta que NO quiero millis de época. Quiero la cantidad de milisegundos actualmente en el reloj.
Entonces, por ejemplo, tengo este bit de código.
Date date2 = new Date();
Long time2 = (long) (((((date2.getHours() * 60) + date2.getMinutes())* 60 ) + date2.getSeconds()) * 1000);
¿Hay alguna manera de obtener milisegundos con la fecha? Hay otra manera de hacer esto?
Nota: System.currentTimeMillis()
me da millis de época, que no es lo que estoy buscando.
java
date
time
milliseconds
Lemonio
fuente
fuente
[0, 999]
, ¿correcto? @thinksteep lee la última oración.java.util.Date
ahora son heredadas , suplantadas por las clases java.time .java.util.Date
ahora son heredadas , suplantadas por las clases java.time . Ver Tutorial de Oracle .Respuestas:
¿Quieres decir?
Por cierto, Windows no permite el viaje en el tiempo hasta 1969
fuente
c.get(Calendar.MILLISECOND)
no debería. ¡Piensa siempre en los rincones!System.currentTimeMillis()
no se ve afectado por las zonas horarias.Usar calendario
o
En la práctica, creo que casi siempre será igual a System.currentTimeMillis ()% 1000; a menos que alguien tenga un salto de milisegundos o algún calendario se defina con una época que no esté en un segundo límite.
fuente
fuente
tl; dr
Solicita la fracción de un segundo del tiempo actual como un número de milisegundos ( sin contar desde la época).
Vea este código en vivo en IdeOne.com .
Usando java.time
La forma moderna es con las clases java.time.
Capture el momento actual en UTC.
Use el
Instant.get
método para interrogar el valor de aTemporalField
. En nuestro caso, loTemporalField
que queremos esChronoField.MILLI_OF_SECOND
.O haz los cálculos tú mismo.
Lo más probable es que esté pidiendo esto para una zona horaria específica. Es probable que la fracción de segundo sea la misma que con
Instant
pero hay tantas anomalías con las zonas horarias que dudo en hacer esa suposición.Interrogar por el segundo fraccional. La pregunta pedía milisegundos , pero las clases java.time usan una resolución más fina de nanosegundos . Eso significa que el número de nanosegundos variará de 0 a 999,999,999.
Si realmente quieres milisegundos, trunca los datos más finos dividiéndolos por un millón. Por ejemplo, medio segundo son 500,000,000 nanosegundos y también 500 milisegundos.
Sobre java.time
El marco java.time está integrado en Java 8 y versiones posteriores. Estas clases suplantar la vieja problemáticos heredados clases de fecha y hora como
java.util.Date
,Calendar
, ySimpleDateFormat
.El proyecto Joda-Time , ahora en modo de mantenimiento , aconseja la migración a las clases java.time .
Para obtener más información, consulte el Tutorial de Oracle . Y busque Stack Overflow para obtener muchos ejemplos y explicaciones. La especificación es JSR 310 .
¿Dónde obtener las clases java.time?
El proyecto ThreeTen-Extra extiende java.time con clases adicionales. Este proyecto es un campo de pruebas para posibles adiciones futuras a java.time. Usted puede encontrar algunas clases útiles aquí, como
Interval
,YearWeek
,YearQuarter
, y más .fuente
Intenté algunos de los anteriores, pero parecen reiniciarse @ 1000
Este definitivamente funciona, y también debe tener en cuenta el año
y luego haga lo mismo para la hora de finalización si es necesario.
fuente
long timeNow = System.currentTimeMillis();
System.out.println(new Date(timeNow));
fuente
Joda-Time
Creo que puedes usar Joda-Time para hacer esto. Echa un vistazo a la
DateTime
clase y sugetMillisOfSecond
método. Algo comofuente
getMillis()
tiene acceso protegido"; necesita usarget()
en su lugar. También tenga en cuenta quenew DateTime(new Date())
es equivalente a escribir simplementenew DateTime()
.millisOfSecond
accede a un objeto y la llamada adicional aget
extrae una primitivaint
de ese objeto. Puede contraer las dos llamadas utilizando el método de obtención de conveniencia,getMillisOfSecond
. Joda-Time sigue este patrón para muchas de sus propiedades.En Java 8 simplemente puedes hacer
fuente
Instant.now().toEpochMilli()
Hice la prueba usando Java 8 No importará el orden en que el constructor siempre toma 0 milisegundos y el concat entre 26 y 33 milisegundos debajo y la iteración de una concatenación de 1000
Espero que ayude a probarlo con tu ide
fuente
Java 8:
fuente
LocalDateTime
clase no puede representar un momento, sin ningún concepto de zona horaria o desplazamiento desde UTC, y por lo tanto no puede rastrear estos problemas de zona horaria.Puede usar la clase java.util.Calendar para obtener tiempo en milisegundos. Ejemplo:
fuente