tl; dr
Pytasz o ułamek sekundy bieżącego czasu jako liczbę milisekund ( nie licząc od epoki).
Instant.now() // Get current moment in UTC, then…
.get( ChronoField.MILLI_OF_SECOND ) // interrogate a `TemporalField`.
2017-04-25T03: 01: 14.113Z → 113
- Uzyskaj ułamek sekundy w nanosekundach (miliardy).
- Podziel przez tysiąc, aby skrócić do milisekund (tysięcy).
Zobacz, jak działa ten kod na IdeOne.com .
Korzystanie z java.time
Współczesnym sposobem są klasy java.time.
Uchwyć aktualny moment w UTC.
Instant.now()
Użyj Instant.get
metody, aby zapytać o wartość TemporalField
. W naszym przypadku TemporalField
chcemy ChronoField.MILLI_OF_SECOND
.
int millis = Instant.now().get( ChronoField.MILLI_OF_SECOND ) ; // Get current moment in UTC, then interrogate a `TemporalField`.
Lub zrób obliczenia samodzielnie.
Bardziej prawdopodobne jest, że pytasz o to dla określonej strefy czasowej. Ułamek sekundy prawdopodobnie będzie taki sam, jak w przypadku, Instant
ale jest tak wiele anomalii w strefach czasowych, że waham się czy przyjąć takie założenie.
ZonedDateTime zdt = ZonedDateTime.now( ZoneId.of( "America/Montreal" ) ) ;
Zapytaj o ułamek sekundy. Pytanie zadawano milisekund , ale klasy java.time używają dokładniejszej rozdzielczości nanosekund . Oznacza to, że liczba nanosekund będzie wynosić od 0 do 999 999 999.
long nanosFractionOfSecond = zdt.getNano();
Jeśli naprawdę potrzebujesz milisekund, skróć dokładniejsze dane, dzieląc je przez milion. Na przykład pół sekundy to 500 000 000 nanosekund, a także 500 milisekund.
long millis = ( nanosFractionOfSecond / 1_000_000L ) ; // Truncate nanoseconds to milliseconds, by a factor of one million.
Informacje o java.time
Struktura java.time jest wbudowana w Javę 8 i nowsze. Klasy te kłopotliwe zastąpić stary starszych klas Date-Time, takich jak java.util.Date
, Calendar
, i SimpleDateFormat
.
Projekt Joda-Time , obecnie w trybie konserwacji , zaleca migrację do klas java.time .
Aby dowiedzieć się więcej, zobacz samouczek Oracle . I przeszukaj Stack Overflow, aby znaleźć wiele przykładów i wyjaśnień. Specyfikacja to JSR 310 .
Skąd wziąć klasy java.time?
- Java SE 8 i SE 9 i nowsze
- Wbudowany.
- Część standardowego interfejsu API języka Java z dołączoną implementacją.
- Java 9 dodaje kilka drobnych funkcji i poprawek.
- Java SE 6 i SE 7
- Android
Projekt ThreeTen-Extra rozszerza java.time o dodatkowe klasy. Ten projekt jest poligonem doświadczalnym dla ewentualnych przyszłych dodatków do java.time. Można znaleźć kilka przydatnych klas tutaj takie jak Interval
, YearWeek
, YearQuarter
, i więcej .
[0, 999]
, prawda? @thinksteep przeczytaj ostatnie zdanie.