Catatan, saya TIDAK ingin milis dari zaman. Saya ingin jumlah milidetik saat ini di jam.
Jadi misalnya, saya memiliki sedikit kode ini.
Date date2 = new Date();
Long time2 = (long) (((((date2.getHours() * 60) + date2.getMinutes())* 60 ) + date2.getSeconds()) * 1000);
Adakah cara untuk mendapatkan milidetik dengan tanggal? Apakah ada cara lain untuk melakukan ini?
Catatan: System.currentTimeMillis()
beri saya milis dari zaman yang bukan itu yang saya cari.
java
date
time
milliseconds
Lemonio
sumber
sumber
[0, 999]
, benar? @thinksteep membaca kalimat terakhir.java.util.Date
sekarang sudah lama , digantikan oleh kelas java.time .java.util.Date
sekarang sudah lama , digantikan oleh kelas java.time . Lihat Tutorial oleh Oracle .Jawaban:
Maksudmu?
BTW Windows tidak mengizinkan penjadwalan perjalanan ke 1969
sumber
c.get(Calendar.MILLISECOND)
tidak boleh. Selalu pikirkan kasus sudut!System.currentTimeMillis()
tidak terpengaruh oleh zona waktu.Gunakan Kalender
atau
Dalam prakteknya saya pikir itu hampir selalu sama dengan System.currentTimeMillis ()% 1000; kecuali seseorang memiliki lompatan-milidetik atau beberapa kalender ditentukan dengan zaman bukan pada batas kedua.
sumber
sumber
tl; dr
Anda meminta sepersekian detik waktu saat ini sebagai jumlah milidetik ( tidak dihitung dari masa).
Lihat kode ini ditayangkan langsung di IdeOne.com .
Menggunakan java.time
Cara modern adalah dengan kelas java.time.
Tangkap momen saat ini dalam UTC.
Gunakan
Instant.get
metode untuk menginterogasi nilai aTemporalField
. Dalam kasus kami, yangTemporalField
kami inginkan adalahChronoField.MILLI_OF_SECOND
.Atau lakukan matematika sendiri.
Kemungkinan besar Anda menanyakan ini untuk zona waktu tertentu. Sepersekian detik kemungkinan besar sama dengan
Instant
tetapi ada begitu banyak anomali dengan zona waktu, saya ragu untuk membuat asumsi itu.Interogasi untuk pecahan detik. Pertanyaan menanyakan milidetik , tetapi kelas java.time menggunakan resolusi nanodetik yang lebih halus . Itu berarti jumlah nanodetik akan berkisar dari 0 hingga 999.999.999.
Jika Anda benar-benar menginginkan milidetik, potong data yang lebih halus dengan membaginya dengan satu juta. Misalnya, setengah detik adalah 500.000.000 nanodetik dan juga 500 milidetik.
Tentang java.time
The java.time kerangka dibangun ke Jawa 8 dan kemudian. Kelas-kelas ini menggantikan tua merepotkan warisan kelas tanggal-waktu seperti
java.util.Date
,Calendar
, &SimpleDateFormat
.Proyek Joda-Time , sekarang dalam mode pemeliharaan , menyarankan migrasi ke kelas java.time .
Untuk mempelajari lebih lanjut, lihat Tutorial Oracle . Dan cari Stack Overflow untuk banyak contoh dan penjelasan. Spesifikasinya adalah JSR 310 .
Di mana mendapatkan kelas java.time?
Proyek ThreeTen-Extra memperluas java.time dengan kelas tambahan. Proyek ini adalah tempat pembuktian untuk kemungkinan penambahan java.time di masa mendatang. Anda mungkin menemukan beberapa kelas berguna di sini seperti
Interval
,YearWeek
,YearQuarter
, dan lebih .sumber
Saya mencoba beberapa yang di atas tetapi tampaknya mengatur ulang @ 1000
Yang ini pasti berhasil, dan juga harus mempertimbangkan tahun ke dalam pertimbangan
lalu lakukan hal yang sama untuk waktu berakhir jika diperlukan.
sumber
long timeNow = System.currentTimeMillis();
System.out.println(new Date(timeNow));
sumber
Waktu Joda
Saya pikir Anda dapat menggunakan Joda-Time untuk melakukan ini. Lihatlah
DateTime
kelas dangetMillisOfSecond
metodenya. Sesuatu sepertisumber
getMillis()
memiliki akses yang dilindungi"; perlu digunakanget()
sebagai gantinya. Juga perhatikan bahwanew DateTime(new Date())
sama dengan menulis sederhananew DateTime()
.millisOfSecond
mengakses objek dan panggilan selanjutnya untukget
mengekstrak primitifint
dari objek itu. Anda bisa menciutkan kedua panggilan menggunakan metode pengambil kemudahangetMillisOfSecond
,. Joda-Time mengikuti pola ini untuk banyak propertinya.Di Java 8 Anda bisa melakukannya
sumber
Instant.now().toEpochMilli()
Saya melakukan tes menggunakan java 8 Tidak masalah urutan pembangun selalu membutuhkan 0 milidetik dan concat antara 26 dan 33 milidetik di bawah dan iterasi 1000 penggabungan
Semoga membantu mencobanya dengan ide Anda
sumber
Jawa 8:
sumber
LocalDateTime
kelas tidak dapat mewakili beberapa saat, kurang setiap konsep zona waktu atau offset-dari-UTC, dan karena itu tidak dapat melacak masalah zona waktu ini.Anda dapat menggunakan kelas java.util.Calendar untuk mendapatkan waktu dalam milidetik. Contoh:
sumber