Uwaga, NIE chcę milis z epoki. Chcę podać liczbę milisekund aktualnie wyświetlanych na zegarze.
Na przykład mam ten kawałek kodu.
Date date2 = new Date();
Long time2 = (long) (((((date2.getHours() * 60) + date2.getMinutes())* 60 ) + date2.getSeconds()) * 1000);
Czy jest sposób, aby uzyskać milisekundy z datą? Czy jest inny sposób, aby to zrobić?
Uwaga: System.currentTimeMillis()
daje mi milis od epoki, której nie szukam.
java
date
time
milliseconds
Lemonio
źródło
źródło
[0, 999]
, prawda? @thinksteep przeczytaj ostatnie zdanie.java.util.Date
obecnie starsze , zastąpione przez klasy java.time .java.util.Date
obecnie starsze , zastąpione przez klasy java.time . Zobacz samouczek firmy Oracle .Odpowiedzi:
Czy masz na myśli?
BTW Windows nie pozwala na podróż do 1969 roku
źródło
c.get(Calendar.MILLISECOND)
nie powinno. Zawsze myśl o narożnikach!System.currentTimeMillis()
strefy czasowe nie mają na nie wpływu.Użyj kalendarza
lub
W praktyce myślę, że prawie zawsze będzie równa System.currentTimeMillis ()% 1000; chyba że ktoś ma milisekundy przestępne lub jakiś kalendarz jest zdefiniowany z epoką nie znajdującą się na drugiej granicy.
źródło
źródło
tl; dr
Pytasz o ułamek sekundy bieżącego czasu jako liczbę milisekund ( nie licząc od epoki).
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.
Użyj
Instant.get
metody, aby zapytać o wartośćTemporalField
. W naszym przypadkuTemporalField
chcemyChronoField.MILLI_OF_SECOND
.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.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.
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.
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
, iSimpleDateFormat
.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?
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 .źródło
Wypróbowałem kilka powyżej, ale wydają się resetować @ 1000
Ten zdecydowanie działa i powinien również uwzględniać rok
a następnie w razie potrzeby zrób to samo z czasem zakończenia.
źródło
long timeNow = System.currentTimeMillis();
System.out.println(new Date(timeNow));
źródło
Joda-Time
Myślę, że możesz do tego użyć Joda-Time . Przyjrzyj się
DateTime
klasie i jejgetMillisOfSecond
metodzie. Coś jakźródło
getMillis()
ma chroniony dostęp”; trzeba użyćget()
zamiast tego. Zauważ też, żenew DateTime(new Date())
jest to równoznaczne z prostym pisaniemnew DateTime()
.millisOfSecond
uzyskuje dostęp do obiektu i dalsze wywołanieget
wyodrębnia prymitywint
z tego obiektu. Można zwinąć dwa połączenia przy użyciu metody getter wygoda,getMillisOfSecond
. Joda-Time podąża za tym wzorem dla wielu swoich właściwości.W Javie 8 możesz to po prostu zrobić
źródło
Instant.now().toEpochMilli()
Zrobiłem test używając java 8 Nie ma znaczenia kolejność, w której budowniczy zawsze zajmuje 0 milisekund, a konkatacja między 26 a 33 milisekundami poniżej i iteracja konkatenacji 1000
Mam nadzieję, że pomoże ci to wypróbować z twoim ID
źródło
Java 8:
źródło
LocalDateTime
Klasa nie może reprezentować chwilę, pozbawiona koncepcję strefy czasowej lub przesunięcia-z czasem UTC, a zatem nie mogą śledzić te problemy strefy czasowej.Aby uzyskać czas w milisekundach, można użyć klasy java.util.Calendar. Przykład:
źródło