Setel Zona Waktu Tanggal di Jawa

1. Ikhtisar

Dalam tutorial singkat ini, kita akan melihat bagaimana mengatur zona waktu dari sebuah tanggal menggunakan Java 7, Java 8 dan library Joda-Time.

2. Menggunakan Java 8

Java 8 memperkenalkan API Tanggal-Waktu baru untuk bekerja dengan tanggal dan waktu yang sebagian besar didasarkan pada pustaka Joda-Waktu.

Kelas Instan dari Java Date Time API memodelkan satu titik sesaat pada garis waktu dalam UTC. Ini mewakili hitungan nanodetik sejak periode momen pertama 1970 UTC.

Pertama, kita akan mendapatkan Instan saat ini dari jam sistem dan ZoneId untuk nama zona waktu:

Instant nowUtc = Instant.now(); ZoneId asiaSingapore = ZoneId.of("Asia/Singapore");

Terakhir, ZoneId dan Instant dapat digunakan untuk membuat objek tanggal-waktu dengan detail zona waktu. Kelas ZonedDateTime mewakili tanggal-waktu dengan zona waktu dalam sistem kalender ISO-8601:

ZonedDateTime nowAsiaSingapore = ZonedDateTime.ofInstant(nowUtc, asiaSingapore);

Kami telah menggunakan ZonedDateTime Java 8 untuk mewakili tanggal-waktu dengan zona waktu.

3. Menggunakan Java 7

Di Java 7, menyetel zona waktu agak rumit. Kelas Tanggal (yang mewakili waktu instan tertentu) tidak berisi informasi zona waktu apa pun.

Pertama, mari kita dapatkan tanggal UTC saat ini dan objek TimeZone :

Date nowUtc = new Date(); TimeZone asiaSingapore = TimeZone.getTimeZone(timeZone);

Di Java 7, kita perlu menggunakan kelas Kalender untuk mewakili tanggal dengan zona waktu.

Terakhir, kita dapat membuat Kalender nowUtc dengan TimeZone asiaSingapore dan mengatur waktunya:

Calendar nowAsiaSingapore = Calendar.getInstance(asiaSingapore); nowAsiaSingapore.setTime(nowUtc);

Direkomendasikan untuk menghindari Java 7 date time API yang mendukung Java 8 date time API atau library Joda-Time.

4. Menggunakan Joda-Time

Jika Java 8 bukan pilihan, kita masih bisa mendapatkan hasil yang sama dari Joda-Time , standar de-facto untuk operasi tanggal-waktu di dunia pra-Java 8.

Pertama, kita perlu menambahkan dependensi Joda-Time ke pom.xml:

 joda-time joda-time 2.10 

Untuk merepresentasikan titik yang tepat pada timeline kita dapat menggunakan paket Instan dari org.joda.time . Secara internal, kelas tersebut menyimpan satu bagian data, instan sebagai milidetik dari epoch Java 1970-01-01T00: 00: 00Z:

Instant nowUtc = Instant.now();

Kami akan menggunakan DateTimeZone untuk mewakili zona waktu (untuk id zona waktu yang ditentukan):

DateTimeZone asiaSingapore = DateTimeZone.forID("Asia/Singapore");

Sekarang waktu nowUtc akan diubah menjadi objek DateTime menggunakan informasi zona waktu:

DateTime nowAsiaSingapore = nowUtc.toDateTime(asiaSingapore);

Ini adalah bagaimana Joda-time API dapat digunakan untuk menggabungkan informasi zona waktu dan tanggal.

5. Kesimpulan

Pada artikel ini, kami menemukan cara mengatur zona waktu di Java menggunakan Java 7, 8 dan Joda-Time API. Untuk mempelajari lebih lanjut tentang dukungan tanggal-waktu Java 8, lihat pengantar waktu-waktu Java 8 kami.

Seperti biasa, cuplikan kode tersedia di repositori GitHub.