FYI, merepotkan tua kelas tanggal-waktu seperti java.util.Date, java.util.Calendar, dan Timestampsekarang warisan, digantikan oleh java.time kelas. Sebagian besar fungsi java.time di - portingkan ke Java 6 & Java 7 di proyek ThreeTen-Backport . Lebih lanjut diadaptasi untuk Android sebelumnya dalam proyek ThreeTenABP . Lihat Cara menggunakan ThreeTenABP… .
Basil Bourque
Jawaban:
298
Solusinya adalah:
Long tsLong =System.currentTimeMillis()/1000;String ts = tsLong.toString();
Ini tidak memperhitungkan offset zona waktu perangkat.
kjdion84
1
@ kjdion84 permisi, tapi kenapa menurutmu itu penting? Hanya berdasarkan pertanyaan.
Cԃ ա ԃ
82
Dari blog pengembang:
System.currentTimeMillis()adalah jam "dinding" standar (waktu dan tanggal) yang menyatakan milidetik sejak zaman. Jam dinding dapat diatur oleh pengguna atau jaringan telepon (lihat setCurrentTimeMillis (panjang) ), sehingga waktu dapat melompat mundur atau maju secara tak terduga. Jam ini hanya boleh digunakan ketika korespondensi dengan tanggal dan waktu di dunia nyata penting, seperti dalam aplikasi kalender atau jam alarm. Pengukuran waktu interval atau berlalu harus menggunakan jam yang berbeda. Jika Anda menggunakan System.currentTimeMillis(), pertimbangkan mendengarkan ACTION_TIME_TICK, ACTION_TIME_CHANGEDdan ACTION_TIMEZONE_CHANGEDsiaran Intent untuk mengetahui kapan waktu berubah.
Dari developer.android.com/reference/java/lang/… Saya menemukan itu System.nanoTime()adalah alternatif untuk System.currentTimeMillis()dan tidak memiliki fluktuasi yang tidak terduga, dan dirancang untuk mengukur perbedaan durasi.
Bianca Daniciuc
2
@ ana01 "nilai nol biasanya setiap kali perangkat terakhir kali dibooting" - sehingga hanya dapat digunakan saat Anda membandingkan perbedaan durasi pada perangkat yang sama. Tidak berguna untuk penyimpanan basis data misalnya.
Michał K
1
Hanya catatan untuk komentar @ ana01 yang System.nanoTime()tidak cocok untuk menampilkan waktu jam dinding. Untuk itu, gunakan System.currentTimeMillis()saja.
Akash Agarwal
33
1320917972 adalah cap waktu Unix menggunakan jumlah detik sejak 00:00:00 UTC pada 1 Januari 1970. Anda dapat menggunakan TimeUnitkelas untuk konversi satuan - dari System.currentTimeMillis()detik.
Berikut ini adalah cap waktu yang dapat dibaca manusia yang dapat digunakan dalam nama file, untuk berjaga-jaga seandainya seseorang membutuhkan hal yang sama yang saya butuhkan:
package com.example.xyz;import android.text.format.Time;/**
* Clock utility.
*/publicclassClock{/**
* Get current time in human-readable form.
* @return current time as a string.
*/publicstaticString getNow(){Time now =newTime();
now.setToNow();String sTime = now.format("%Y_%m_%d %T");return sTime;}/**
* Get current time in human-readable form without spaces and special characters.
* The returned value may be used to compose a file name.
* @return current time as a string.
*/publicstaticString getTimeStamp(){Time now =newTime();
now.setToNow();String sTime = now.format("%Y_%m_%d_%H_%M_%S");return sTime;}}
Hei, bisakah kamu juga memberi tahu cara terbaik untuk mengurutkan daftar cap waktu? Saya berpikir untuk menyortirnya sendiri tetapi saya pikir mungkin ada cara yang lebih baik.
Abbas
Untuk referensi di masa mendatang bagi siapa pun yang membaca ini, ketahuilah bahwa "android.text.format.Time" sekarang tidak digunakan lagi
Sementara pembagian oleh 1000 tidak akan mengejutkan banyak orang, melakukan konversi waktu Anda sendiri bisa menjadi sulit dibaca dengan cepat, jadi itu kebiasaan buruk untuk masuk ketika Anda bisa menghindarinya.
The Instantkelas yang saya gunakan adalah bagian dari java.time, tanggal Jawa modern dan waktu API. Ini bawaan pada versi Android baru, API level 26 dan lebih tinggi. Jika Anda memprogram untuk Android yang lebih lama, Anda mungkin mendapatkan backport, lihat di bawah. Jika Anda tidak ingin melakukan itu, dapat dimengerti, saya masih menggunakan konversi bawaan:
Ini sama dengan jawaban oleh sealskej. Outputnya sama seperti sebelumnya.
Pertanyaan: Bisakah saya menggunakan java.time di Android?
Ya, java.time bekerja dengan baik pada perangkat Android yang lebih lama dan lebih baru. Itu hanya membutuhkan setidaknya Java 6 .
Di Java 8 dan yang lebih baru dan pada perangkat Android yang lebih baru (dari API level 26), API modern hadir.
Dalam Java 6 dan 7 yang bukan Android, dapatkan ThreeTen Backport, backport dari kelas baru (ThreeTen untuk JSR 310; lihat tautan di bagian bawah).
Pada (yang lebih tua) Android menggunakan ThreeTen Backport edisi Android. Itu disebut ThreeTenABP. Dan pastikan Anda mengimpor kelas tanggal dan waktu dari org.threeten.bpdengan subpackages.
Jawabannya hampir sempurna (saya tervvotasikan) tetapi, setidaknya menurut pendapat jujur saya, Anda harus menghapus referensi ThreeTen Backport karena ini adalah pertanyaan tentang Android dan bukan Java secara umum. Dan itu mungkin membingungkan bagi pemula di Android.
Slobodan Antonijević
1
@ SlobodanAntonijević Penting bagi programmer Android untuk memahami bahwa (a) jika mereka mendukung Android 26 dan kemudian, mereka memiliki implementasi java.time built-in, (b) jika mendukung Android awal sebelum 26, mereka harus menambahkan perpustakaan , pustaka ThreeTenABP , dan (c) jika menggunakan ThreeTenABP , ketahuilah bahwa pustaka ini sebenarnya merupakan adaptasi dari ThreeTen-Backport yang diadaptasi dari Java ke Android. The ThreeTenABP perpustakaan hanya bungkus Android khusus sekitar ThreeTen-backport perpustakaan. Lihat grafik ini membandingkan 3 perpustakaan.
Basil Bourque
@ BasilBourque Anda sepenuhnya benar. Tapi, Anda sebenarnya bisa mengimpor ThreeTen-Backport dan menggunakannya di aplikasi Android, tetapi dengan dampak yang sangat besar terhadap kinerja menyebabkan ketergantungan JAR-nya. Inilah sebabnya saya mengatakan bahwa postingan itu harus lebih spesifik bahwa Android devs seharusnya tidak pernah menggunakan ThreeTen-Backport, dan alih-alih menggunakan ThreeTenABP untuk API 25 dan di bawah dukungan. Saya telah melihat banyak dev di berbagai papan yang bingung mana yang harus digunakan untuk Android, karena mereka terdengar mirip namanya.
Slobodan Antonijević
Poin bagus, @ SlobodanAntonijević. Saya telah mencoba membuatnya sedikit lebih jelas.
Ole VV
1
@ SlobodanAntonijević Tabel ini menunjukkan di mana mendapatkan java.time untuk Java dan Android mungkin membantu menjelaskannya.
Kode ini adalah versi Kotlin. Saya punya ide lain untuk menambahkan integer acak acak dalam digit terakhir untuk memberikan waktu varians zaman.
Versi Kotlin
val randomVariance =(0..100).shuffled().first()
val currentEpoch =(System.currentTimeMilis()/1000)+ randomVariance
val deltaEpoch = oldEpoch - currentEpoch
Saya pikir akan lebih baik menggunakan kode ini kemudian tergantung pada versi android 26 atau lebih
java.util.Date
,java.util.Calendar
, danTimestamp
sekarang warisan, digantikan oleh java.time kelas. Sebagian besar fungsi java.time di - portingkan ke Java 6 & Java 7 di proyek ThreeTen-Backport . Lebih lanjut diadaptasi untuk Android sebelumnya dalam proyek ThreeTenABP . Lihat Cara menggunakan ThreeTenABP… .Jawaban:
Solusinya adalah:
sumber
Dari blog pengembang:
System.currentTimeMillis()
adalah jam "dinding" standar (waktu dan tanggal) yang menyatakan milidetik sejak zaman. Jam dinding dapat diatur oleh pengguna atau jaringan telepon (lihat setCurrentTimeMillis (panjang) ), sehingga waktu dapat melompat mundur atau maju secara tak terduga. Jam ini hanya boleh digunakan ketika korespondensi dengan tanggal dan waktu di dunia nyata penting, seperti dalam aplikasi kalender atau jam alarm. Pengukuran waktu interval atau berlalu harus menggunakan jam yang berbeda. Jika Anda menggunakanSystem.currentTimeMillis()
, pertimbangkan mendengarkanACTION_TIME_TICK
,ACTION_TIME_CHANGED
danACTION_TIMEZONE_CHANGED
siaran Intent untuk mengetahui kapan waktu berubah.sumber
System.nanoTime()
adalah alternatif untukSystem.currentTimeMillis()
dan tidak memiliki fluktuasi yang tidak terduga, dan dirancang untuk mengukur perbedaan durasi.System.nanoTime()
tidak cocok untuk menampilkan waktu jam dinding. Untuk itu, gunakanSystem.currentTimeMillis()
saja.1320917972 adalah cap waktu Unix menggunakan jumlah detik sejak 00:00:00 UTC pada 1 Januari 1970. Anda dapat menggunakan
TimeUnit
kelas untuk konversi satuan - dariSystem.currentTimeMillis()
detik.sumber
Anda dapat menggunakan kelas SimpleDateFormat :
sumber
Gunakan metode di bawah ini untuk mendapatkan cap waktu saat ini. Ini bekerja dengan baik untuk saya.
sumber
Ini penggunaan sederhana:
jika Anda menginginkannya dalam format tertentu maka Anda perlu Formatter seperti di bawah ini
sumber
Berikut ini adalah cap waktu yang dapat dibaca manusia yang dapat digunakan dalam nama file, untuk berjaga-jaga seandainya seseorang membutuhkan hal yang sama yang saya butuhkan:
sumber
Coba ini
dan timeStamp ke format waktu
sumber
waktu java
Saya ingin berkontribusi jawaban modern.
Output saat berjalan sekarang:
Sementara pembagian oleh 1000 tidak akan mengejutkan banyak orang, melakukan konversi waktu Anda sendiri bisa menjadi sulit dibaca dengan cepat, jadi itu kebiasaan buruk untuk masuk ketika Anda bisa menghindarinya.
The
Instant
kelas yang saya gunakan adalah bagian dari java.time, tanggal Jawa modern dan waktu API. Ini bawaan pada versi Android baru, API level 26 dan lebih tinggi. Jika Anda memprogram untuk Android yang lebih lama, Anda mungkin mendapatkan backport, lihat di bawah. Jika Anda tidak ingin melakukan itu, dapat dimengerti, saya masih menggunakan konversi bawaan:Ini sama dengan jawaban oleh sealskej. Outputnya sama seperti sebelumnya.
Pertanyaan: Bisakah saya menggunakan java.time di Android?
Ya, java.time bekerja dengan baik pada perangkat Android yang lebih lama dan lebih baru. Itu hanya membutuhkan setidaknya Java 6 .
org.threeten.bp
dengan subpackages.Tautan
java.time
.java.time
pertama kali dijelaskan.java.time
ke Java 6 dan 7 (ThreeTen untuk JSR-310).sumber
Solusi di Kotlin:
Pastikan versi SDK minimum Anda adalah 26.
sumber
Saya sarankan menggunakan jawaban Hits, tetapi menambahkan format Lokal, ini yang direkomendasikan oleh Pengembang Android :
sumber
Kode ini adalah versi Kotlin. Saya punya ide lain untuk menambahkan integer acak acak dalam digit terakhir untuk memberikan waktu varians zaman.
Versi Kotlin
Saya pikir akan lebih baik menggunakan kode ini kemudian tergantung pada versi android 26 atau lebih
sumber