tl; dr
Instant.ofEpochSecond( 1_280_512_800L )
2010-07-30T18: 00: 00Z
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.
Instant instant = Instant.ofEpochSecond( 1_280_512_800L );
instant.toString (): 2010-07-30T18: 00: 00Z
Lihat kode dijalankan langsung di IdeOne.com .
Asia/Kabul
atau Asia/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 dari Zulu
, berarti UTC). Setiap kesempatan OS komputer Anda atau PHP diatur ke Asia/Kabul
atau Asia/Tehran
zona waktu? Saya kira begitu ketika Anda melaporkan IRST
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
, seperti America/Montreal
, Africa/Casablanca
, atau Pacific/Auckland
. Jangan menggunakan singkatan 3-4 huruf seperti EST
atau IST
atau IRST
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 mendapatkan ZonedDateTime
. Masih momen simultan yang sama, tetapi dilihat sebagai waktu jam dinding yang berbeda .
ZoneId z = ZoneId.of( "Asia/Tehran" ) ;
ZonedDateTime zdt = instant.atZone( z ); // Same moment, same point on timeline, but seen as different wall-clock time.
2010-07-30T22: 30 + 04: 30 [Asia / Teheran]
Mengonversi dari java.time ke kelas lawas
Anda harus tetap menggunakan kelas java.time baru. Tetapi Anda dapat mengonversi ke yang lama jika diperlukan.
java.util.Date date = java.util.Date.from( instant );
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
DateTime dateTime = new DateTime( ( 1_280_512_800L * 1000_L ), DateTimeZone.forID( "Europe/Paris" ) );
Terbaik untuk menghindari kelas java.util.Date dan .Calendar yang terkenal bermasalah. Tetapi jika Anda harus menggunakan Tanggal, Anda dapat mengonversi dari Joda-Time.
java.util.Date date = dateTime.toDate();
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?
- Java SE 8 , Java SE 9 , dan yang lebih baru
- Built-in
- Bagian dari API Java standar dengan implementasi yang dibundel.
- Java 9 menambahkan beberapa fitur dan perbaikan kecil.
- Java SE 6 dan Java SE 7
- Android
- Versi implementasi bundel Android selanjutnya dari kelas java.time.
- Untuk Android sebelumnya (<26), yang ThreeTenABP proyek menyesuaikan ThreeTen-backport (disebutkan di atas). Lihat Cara menggunakan ThreeTenABP… .
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 .