Panduan untuk Kelas Jam Java

1. Gambaran keseluruhan

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

2. Kelas Jam

Jam ditambahkan di Java 8 dan memberikan akses ke sekejap dalam waktu menggunakan jam sistem terbaik yang tersedia, dan untuk digunakan sebagai penyedia waktu yang dapat diganti secara efektif untuk tujuan pengujian.

Tarikh dan waktu semasa bergantung pada zon waktu dan, untuk aplikasi global, penyedia waktu diperlukan untuk memastikan bahawa tarikh dan waktu dibuat dengan zon waktu yang betul.

Kelas ini membantu kami menguji bahawa perubahan kod kami berfungsi dengan zon waktu yang berbeza atau - ketika menggunakan jam tetap - waktu itu tidak mempengaruhi kod kami.

The Clock kelas abstrak, jadi kita tidak boleh membuat satu contoh daripadanya. Kaedah kilang berikut boleh digunakan:

  • mengimbangi (Jam, Tempoh) - mengembalikan jam yang diimbangi dengan Jangka masa yang ditentukan. Kes penggunaan utama untuk ini adalah untuk mensimulasikan berjalan di masa depan atau masa lalu
  • systemUTC () - mengembalikan jam yang mewakili zon waktu UTC
  • tetap (Instant, ZoneId) - sentiasa mengembalikan Instant yang sama. Kes penggunaan utama untuk ini adalah dalam ujian, di mana jam tetap memastikan bahawa ujian tidak bergantung pada jam semasa

Kami akan mengkaji sebahagian besar kaedah yang ada di kelas Jam .

2.1. sekejap ()

Kaedah ini mengembalikan sekejap mewakili saat semasa 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. sistemUTC ()

Kaedah ini mengembalikan objek Jam yang mewakili saat semasa di zon 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 ()

Kaedah statik ini mengembalikan objek Jam untuk zon waktu yang dikenal pasti oleh id zon 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 ()

Kaedah statik ini mengembalikan objek Jam yang mewakili seketika semasa dan menggunakan zon waktu lalai sistem yang dijalankan:

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

Garis di atas menghasilkan hasil berikut (dengan anggapan zon waktu lalai kami adalah "Asia / Kalkuta"):

SystemClock[Asia/Calcutta]

Kita boleh mencapai tingkah laku yang sama dengan melewati ZoneId.systemDefault () :

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

2.5. milis ()

Kaedah ini mengembalikan detik semasa dalam milisaat. Ini disediakan untuk membolehkan penggunaan jam dalam kes penggunaan berprestasi tinggi di mana penciptaan objek tidak dapat diterima . Kaedah ini boleh digunakan di tempat-tempat di mana kita sebaliknya menggunakan System.currentTimeInMillis () :

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

akan menghasilkan:

1523104441258

2.6. mengimbangi ()

Kaedah statik ini mengembalikan sekejap dari jam asas yang ditentukan dengan jangka masa yang ditentukan ditambah.

Sekiranya tempohnya negatif, maka sekejap jam yang dihasilkan akan lebih awal daripada jam asas yang diberikan.

Dengan menggunakan ofset , kita dapat memperoleh instan pada masa lalu dan masa depan jam asas yang diberikan. Sekiranya kita melepasi tempoh sifar maka kita akan mendapat jam yang sama dengan jam asas 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. tandakan ()

Kaedah statik ini mengembalikan sekejap dari jam yang ditentukan yang dibulatkan kepada kejadian terdekat dalam jangka masa yang ditentukan . Tempoh jam yang ditentukan mestilah 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. tandakanSeconds ()

Kaedah statik ini mengembalikan penanda segera semasa dalam satu saat untuk zon waktu yang diberikan. Jam ini akan sentiasa menetapkan medan nano-detik ke sifar:

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

akan menghasilkan:

2018-04-07T17:40:23Z

Perkara yang sama dapat dicapai dengan menggunakan tanda centang () :

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()

Kaedah ini mengembalikan jam yang selalu mengembalikan sekejap yang sama . Kes penggunaan utama kaedah ini adalah dalam ujian, di mana jam tetap memastikan bahawa ujian tidak bergantung pada jam semasa.

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. Kesimpulannya

Dalam artikel ini, kita masuk ke kelas Java Clock dan cara yang berbeza untuk menggunakannya dengan kaedah yang ada.

Seperti biasa, contoh kod boleh didapati di GitHub.