tl; dr
Gunakan java.time.Instant
kelas untuk mem-parsing teks dalam format standar ISO 8601, mewakili momen dalam UTC.
Instant.parse( "2010-10-02T12:23:23Z" )
ISO 8601
Format itu ditentukan oleh standar ISO 8601 untuk format string tanggal-waktu.
Kedua:
... gunakan format ISO 8601 secara default untuk parsing dan menghasilkan string.
Anda umumnya harus menghindari menggunakan kelas java.util.Date /.Calendar & java.text.SimpleDateFormat yang lama karena mereka terkenal merepotkan, membingungkan, dan cacat. Jika diperlukan untuk beroperasi, Anda dapat mengonversi ke sana kemari.
waktu java
Dibangun ke dalam Java 8 dan yang lebih baru adalah kerangka java.time baru . Terinspirasi oleh Joda-Time , didefinisikan oleh JSR 310 , dan diperpanjang oleh proyek ThreeTen-Extra .
Instant instant = Instant.parse( "2010-10-02T12:23:23Z" ); // `Instant` is always in UTC.
Konversikan ke kelas lama.
java.util.Date date = java.util.Date.from( instant ); // Pass an `Instant` to the `from` method.
Zona waktu
Jika perlu, Anda dapat menetapkan zona waktu.
ZoneId zoneId = ZoneId.of( "America/Montreal" ); // Define a time zone rather than rely implicitly on JVM’s current default time zone.
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId ); // Assign a time zone adjustment from UTC.
Mengubah.
java.util.Date date = java.util.Date.from( zdt.toInstant() ); // Extract an `Instant` from the `ZonedDateTime` to pass to the `from` method.
Joda-Time
UPDATE: Proyek Joda-Time sekarang dalam mode pemeliharaan. Tim menyarankan migrasi ke kelas java.time .
Berikut adalah beberapa contoh kode dalam Joda-Time 2.8.
org.joda.time.DateTime dateTime_Utc = new DateTime( "2010-10-02T12:23:23Z" , DateTimeZone.UTC ); // Specifying a time zone to apply, rather than implicitly assigning the JVM’s current default.
Konversi ke kelas lama. Perhatikan bahwa zona waktu yang ditetapkan hilang dalam konversi, karena juDate tidak dapat ditetapkan zona waktu.
java.util.Date date = dateTime_Utc.toDate(); // The `toDate` method converts to old class.
Zona waktu
Jika perlu, Anda dapat menetapkan zona waktu.
DateTimeZone zone = DateTimeZone.forID( "America/Montreal" );
DateTime dateTime_Montreal = dateTime_Utc.withZone ( zone );
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 .