Panduan untuk Kelas Jam Java

1. Ikhtisar

Dalam tutorial ini, kita akan melihat kelas Java Clock dari paket java.time . Kami akan menjelaskan apa itu kelas Jam dan bagaimana kami dapat menggunakannya.

2. Kelas Jam

Jam telah ditambahkan di Java 8 dan menyediakan akses ke waktu instan menggunakan jam sistem terbaik yang tersedia, dan untuk digunakan sebagai penyedia waktu yang dapat dihentikan secara efektif untuk tujuan pengujian.

Tanggal dan waktu saat ini bergantung pada zona waktu dan, untuk aplikasi global, penyedia waktu diperlukan untuk memastikan bahwa tanggal dan waktu dibuat dengan zona waktu yang benar.

Kelas ini membantu kami menguji apakah perubahan kode kami berfungsi dengan zona waktu yang berbeda atau - saat menggunakan jam tetap - waktu tersebut tidak memengaruhi kode kami.

Kelas Jam abstrak, jadi kita tidak bisa membuat turunannya. Metode pabrik berikut dapat digunakan:

  • offset (Jam, Durasi) - mengembalikan jam yang diimbangi dengan Durasi yang ditentukan. Kasus penggunaan utama untuk ini adalah untuk mensimulasikan yang berjalan di masa depan atau masa lalu
  • systemUTC () - mengembalikan jam yang mewakili zona waktu UTC
  • tetap (Instan, ZoneId) - selalu mengembalikan Instan yang sama. Kasus penggunaan utama untuk ini adalah dalam pengujian, di mana jam tetap memastikan bahwa pengujian tidak bergantung pada jam saat ini

Kami akan melihat sebagian besar metode yang tersedia di kelas Jam .

2.1. instan ()

Metode ini mengembalikan instan yang mewakili instan saat ini yang ditentukan oleh jam:

Clock clock = Clock.systemDefaultZone(); Instant instant = clock.instant(); System.out.println(instant);

akan menghasilkan:

2018-04-07T03:59:35.555Z

2.2. systemUTC ()

Metode ini mengembalikan objek Jam yang mewakili momen saat ini di zona UTC:

Clock clock = Clock.systemUTC(); System.out.println("UTC time :: " + clock.instant());

akan menghasilkan:

UTC time :: 2018-04-04T17:40:12.353Z

2.3. sistem()

Metode statis ini mengembalikan objek Jam untuk zona waktu yang diidentifikasi oleh id zona waktu yang diberikan:

Clock clock = Clock.system(ZoneId.of("Asia/Calcutta")); System.out.println(clock.instant());

akan menghasilkan:

2018-04-04T18:00:31.376Z

2.4. systemDefaultZone ()

Metode statis ini mengembalikan objek Jam yang mewakili waktu instan saat ini dan menggunakan zona waktu default dari sistem yang menjalankannya:

Clock clock = Clock.systemDefaultZone(); System.out.println(clock);

Baris di atas memberikan hasil sebagai berikut (dengan asumsi zona waktu default kami adalah "Asia / Calcutta"):

SystemClock[Asia/Calcutta]

Kita dapat mencapai perilaku yang sama dengan meneruskan ZoneId.systemDefault () :

Clock clock = Clock.system(ZoneId.systemDefault());

2.5. milis ()

Metode ini mengembalikan jam instan saat ini dalam milidetik. Ini disediakan untuk memungkinkan penggunaan jam dalam kasus penggunaan berkinerja tinggi di mana pembuatan objek tidak dapat diterima . Metode ini dapat digunakan di tempat-tempat di mana kami seharusnya menggunakan System.currentTimeInMillis () :

Clock clock = Clock.systemDefaultZone(); System.out.println(clock.millis());

akan menghasilkan:

1523104441258

2.6. mengimbangi()

Metode statis ini mengembalikan instan dari jam dasar yang ditentukan dengan penambahan durasi yang ditentukan.

Jika durasinya negatif, maka jam instan yang dihasilkan akan lebih awal dari jam dasar yang diberikan.

Dengan menggunakan offset , kita bisa mendapatkan instans di masa lalu dan masa depan dari jam dasar tertentu. Jika kami melewatkan durasi nol maka kami akan mendapatkan jam yang sama dengan jam dasar yang diberikan:

Clock baseClock = Clock.systemDefaultZone(); // result clock will be later than baseClock Clock clock = Clock.offset(baseClock, Duration.ofHours(72)); System.out.println(clock5.instant()); // result clock will be same as baseClock                            clock = Clock.offset(baseClock, Duration.ZERO); System.out.println(clock.instant()); // result clock will be earlier than baseClock             clock = Clock.offset(baseClock, Duration.ofHours(-72)); System.out.println(clock.instant());

akan menghasilkan:

2018-04-10T13:24:07.347Z 2018-04-07T13:24:07.348Z 2018-04-04T13:24:07.348Z

2.7. kutu()

Metode statis ini mengembalikan instans dari jam tertentu yang dibulatkan ke kejadian terdekat dari durasi yang ditentukan . Durasi jam yang ditentukan harus positif:

Clock clockDefaultZone = Clock.systemDefaultZone(); Clock clocktick = Clock.tick(clockDefaultZone, Duration.ofSeconds(30)); System.out.println("Clock Default Zone: " + clockDefaultZone.instant()); System.out.println("Clock tick: " + clocktick.instant());

akan menghasilkan:

Clock Default Zone: 2018-04-07T16:42:05.473Z Clock tick: 2018-04-07T16:42:00Z

2.8. tickSeconds ()

Metode statis ini mengembalikan detak instan saat ini dalam hitungan detik penuh untuk zona waktu tertentu. Jam ini akan selalu mengatur bidang nano-detik ke nol:

ZoneId zoneId = ZoneId.of("Asia/Calcutta"); Clock clock = Clock.tickSeconds(zoneId); System.out.println(clock.instant());

akan menghasilkan:

2018-04-07T17:40:23Z

Hal yang sama dapat dicapai dengan menggunakan tick () :

Clock clock = Clock.tick(Clock.system(ZoneId.of("Asia/Calcutta")), Duration.ofSeconds(1));

2.9. tickMinutes ()

This static method returns the clock instant ticking in whole minutes for the specified timezone. This clock will always have the nano-of-second and second-of-minute fields set to zero:

ZoneId zoneId = ZoneId.of("Asia/Calcutta"); Clock clock = Clock.tickMinutes(zoneId); System.out.println(clock.instant());

will produce:

2018-04-07T17:26:00Z

The same can be achieved by using tick():

Clock clock = Clock.tick(Clock.system(ZoneId.of("Asia/Calcutta")), Duration.ofMinutes(1));

2.10. withZone()

This method returns a copy of this clock with a different time zone.

If we have a clock instance for a specific time zone, we can make a copy of that clock for different time zone:

ZoneId zoneSingapore = ZoneId.of("Asia/Singapore");   Clock clockSingapore = Clock.system(zoneSingapore);  System.out.println(clockSingapore.instant()); ZoneId zoneCalcutta = ZoneId.of("Asia/Calcutta"); Clock clockCalcutta = clockSingapore.withZone(zoneCalcutta); System.out.println(clockCalcutta.instant());

will produce:

2018-04-07T17:55:43.035Z 2018-04-07T17:55:43.035Z

2.11. getZone()

This method returns the time zone of the given Clock.

Clock clock = Clock.systemDefaultZone(); ZoneId zone = clock.getZone(); System.out.println(zone.getId());

will produce:

Asia/Calcutta

2.12. fixed()

Metode ini mengembalikan jam yang selalu mengembalikan instan yang sama . Kasus penggunaan utama untuk metode ini adalah dalam pengujian, di mana jam tetap memastikan bahwa pengujian tidak bergantung pada jam saat ini.

Clock fixedClock = Clock.fixed(Instant.parse("2018-04-29T10:15:30.00Z"), ZoneId.of("Asia/Calcutta")); System.out.println(fixedClock);

akan menghasilkan:

FixedClock[2018-04-29T10:15:30Z,Asia/Calcutta]

3. Kesimpulan

Pada artikel ini, kita akan mempelajari kelas Java Clock dan berbagai cara untuk menggunakannya dengan metode yang tersedia.

Seperti biasa, contoh kode tersedia di GitHub.