Saya perlu mengubah cap waktu unix menjadi objek tanggal.
Saya mencoba ini:
java.util.Date time = new java.util.Date(timeStamp);
Nilai cap waktu adalah: 1280512800
Tanggal harus "2010/07/30 - 22:30:00" (seperti yang saya dapatkan dari PHP) tetapi saya mendapatkannya Thu Jan 15 23:11:56 IRST 1970
.
Bagaimana seharusnya itu dilakukan?
java.util.Date
sekarang adalah warisan , digantikan oleh kelas java.time . Lihat Tutorial oleh Oracle .Jawaban:
Untuk
1280512800
, kalikan dengan 1000, karena java mengharapkan milidetik:Jika Anda sudah memiliki milidetik, maka cukup
new java.util.Date((long)timeStamp);
Dari dokumentasi :
sumber
(long)
sangat penting: tanpa itu bilangan bulat meluap.java.util.Date
adalah nama kelas yang sepenuhnya memenuhi syarat.Date
mungkin hal yang sama persis asalkan Anda mengimporjava.util
paket di kelas Anda.Date time = new Date(TimeUnit.MILLISECONDS.convert(unixTimestamp, TimeUnit.SECONDS));
java.util.Date
sekarang adalah warisan , digantikan oleh kelas java.time . Lihat Tutorial oleh Oracle .waktu java
Java 8 memperkenalkan API baru untuk bekerja dengan tanggal dan waktu: paket java.time .
Dengan java.time Anda dapat menguraikan hitungan detik penuh Anda sejak referensi zaman pertama 1970 di UTC, 1970-01-01T00: 00Z. Hasilnya adalah
Instant
.Jika Anda memerlukan
java.util.Date
untuk beroperasi dengan kode lama yang belum diperbarui untuk java.time , konversi. Panggil metode konversi baru yang ditambahkan ke kelas lama.sumber
java.util.Date
. Kelas-kelas lama adalah warisan dan harus dihindari. Meskipun Anda memang dapat mengonversi ke / dari kelas legacy dan java.time, yang terbaik adalah tetap menggunakan java.time kapan pun memungkinkan.Ini cara yang benar:
sumber
Sepertinya Kalender adalah cara baru untuk pergi:
Baris terakhir hanyalah contoh bagaimana menggunakannya, yang ini akan mencetak misalnya "14.06.2012".
Jika Anda telah menggunakan System.currentTimeMillis () untuk menyimpan Timestamp, Anda tidak memerlukan bagian "* 1000".
Jika Anda memiliki stempel waktu dalam string, Anda harus menguraikannya terlebih dahulu sebagai panjang: Long.parseLong (timestamp).
https://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html
sumber
timestamp
bilangan bulat, Anda harus mengubahnya(long)
terlebih dahulu, jika tidak, Anda akan berakhir dengan tanggal yang salah.mydate.setTimeInMillis((long) timestamp*1000);
java.util.Date
,java.util.Calendar
, danjava.text.SimpleDateFormat
sekarang warisan , digantikan oleh java.time kelas dibangun ke Jawa 8 dan kemudian. Lihat Tutorial oleh Oracle .tl; dr
waktu java
Kerangka java.time baru dibangun ke dalam Java 8 dan kemudian adalah penerus Joda-Time.
Kelas-kelas baru ini termasuk metode pabrik yang berguna untuk mengkonversi hitungan seluruh detik dari zaman. Anda mendapatkan
Instant
, sesaat di timeline dalam UTC dengan resolusi hingga nanodetik.Lihat kode dijalankan langsung di IdeOne.com .
Asia/Kabul
atauAsia/Tehran
zona waktu?Anda melaporkan mendapatkan nilai waktu hari 22:30 bukannya 18:00 yang terlihat di sini. Saya menduga utilitas PHP Anda secara implisit menerapkan zona waktu default untuk menyesuaikan dari UTC. Nilai saya di sini adalah UTC, ditandai dengan
Z
(kependekan dariZulu
, berarti UTC). Setiap kesempatan OS komputer Anda atau PHP diatur keAsia/Kabul
atauAsia/Tehran
zona waktu? Saya kira begitu ketika Anda melaporkanIRST
dalam output Anda yang tampaknya berarti waktu Iran. Saat ini di 2017 mereka adalah satu-satunya zona yang beroperasi dengan waktu musim panas yaitu empat setengah jam lebih awal dari UTC.Tentukan nama zona waktu yang tepat dalam format
continent/region
, sepertiAmerica/Montreal
,Africa/Casablanca
, atauPacific/Auckland
. Jangan menggunakan singkatan 3-4 huruf sepertiEST
atauIST
atauIRST
karena mereka tidak zona benar waktu, tidak standar, dan bahkan tidak unik (!).Jika Anda ingin melihat momen Anda melalui lensa zona waktu wilayah tertentu, terapkan a
ZoneId
untuk mendapatkanZonedDateTime
. Masih momen simultan yang sama, tetapi dilihat sebagai waktu jam dinding yang berbeda .Mengonversi dari java.time ke kelas lawas
Anda harus tetap menggunakan kelas java.time baru. Tetapi Anda dapat mengonversi ke yang lama jika diperlukan.
Joda-Time
UPDATE: Proyek Joda-Time sekarang dalam mode pemeliharaan , dengan tim menyarankan migrasi ke kelas java.time .
FYI, konstruktor untuk DateTime Joda-Time serupa: Kalikan dengan seribu untuk menghasilkan (bukan !).
long
int
Terbaik untuk menghindari kelas java.util.Date dan .Calendar yang terkenal bermasalah. Tetapi jika Anda harus menggunakan Tanggal, Anda dapat mengonversi dari Joda-Time.
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. Spesifikasi adalah JSR 310 .
Anda dapat bertukar objek java.time secara langsung dengan database Anda. Gunakan driver JDBC yang sesuai dengan JDBC 4.2 atau yang lebih baru. Tidak perlu untuk string, tidak perlu untuk
java.sql.*
kelas.Di mana mendapatkan kelas java.time?
Proyek ThreeTen-Extra memperpanjang java.time dengan kelas tambahan. Proyek ini adalah ajang pembuktian untuk kemungkinan penambahan masa depan ke java.time. Anda mungkin menemukan beberapa kelas berguna di sini seperti
Interval
,YearWeek
,YearQuarter
, dan lebih .sumber
Konstruktor Date mengharapkan nilai timeStamp dalam milidetik. Lipat gandakan nilai stempel waktu Anda dengan 1000, lalu berikan kepada konstruktor.
sumber
Jika Anda mengonversi nilai cap waktu pada mesin yang berbeda, Anda juga harus memeriksa zona waktu mesin tersebut. Sebagai contoh;
Dekripsi di atas akan menghasilkan nilai Tanggal yang berbeda, jika Anda menjalankan dengan zona waktu EST atau UTC.
Untuk mengatur zona waktu; alias ke UTC, Anda cukup menulis ulang;
sumber
Untuk kotlin
sumber
Terkadang Anda perlu bekerja dengan penyesuaian.
Jangan gunakan gips terlalu lama! Gunakan nanoadjustment.
Misalnya, menggunakan Oanda Java API untuk perdagangan Anda bisa mendapatkan datetime sebagai format UNIX.
Misalnya: 1592523410.590566943
Anda mendapatkan:
Juga, gunakan:
sumber
sumber