tl; dr
Solicita la fracción de un segundo del tiempo actual como un número de milisegundos ( sin contar desde la época).
Instant.now() // Get current moment in UTC, then…
.get( ChronoField.MILLI_OF_SECOND ) // interrogate a `TemporalField`.
2017-04-25T03: 01: 14.113Z → 113
- Obtenga el segundo fraccional en nanosegundos (miles de millones).
- Divide entre mil para truncar a milisegundos (miles).
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.
Instant.now()
Use el Instant.get
método para interrogar el valor de a TemporalField
. En nuestro caso, lo TemporalField
que queremos es ChronoField.MILLI_OF_SECOND
.
int millis = Instant.now().get( ChronoField.MILLI_OF_SECOND ) ; // Get current moment in UTC, then interrogate a `TemporalField`.
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.
ZonedDateTime zdt = ZonedDateTime.now( ZoneId.of( "America/Montreal" ) ) ;
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.
long nanosFractionOfSecond = zdt.getNano();
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.
long millis = ( nanosFractionOfSecond / 1_000_000L ) ; // Truncate nanoseconds to milliseconds, by a factor of one million.
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
, y SimpleDateFormat
.
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?
- Java SE 8 y SE 9 y posterior
- Incorporado.
- Parte de la API Java estándar con una implementación integrada.
- Java 9 agrega algunas características menores y correcciones.
- Java SE 6 y SE 7
- Gran parte de la funcionalidad java.time se transfiere a Java 6 y 7 en ThreeTen-Backport .
- Androide
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 .
[0, 999]
, ¿correcto? @thinksteep lee la última oración.