Vodič za klasu Java Clock

1. Pregled

U ovom uputstvu idemo pogledati u Javu Sat razred iz java.vrijeme paket. Objasnit ćemo što Sat razred je i kako ga možemo koristiti.

2. The Sat Razred

Sat je dodan u Javi 8 i pruža pristup trenutku u vremenu koristeći najbolji raspoloživi sistemski sat i koji se koristi kao dobavljač vremena koji se može učinkovito uštedjeti u svrhu testiranja.

Trenutni datum i vrijeme ovise o vremenskoj zoni, a za globalizirane programe nužan je dobavljač vremena kako bi se osiguralo da su datum i vrijeme stvoreni s ispravnom vremenskom zonom.

Ova klasa pomaže nam da testiramo da li promjene koda rade s različitim vremenskim zonama ili - kada upotrebljavamo fiksni sat - da vrijeme ne utječe na naš kôd.

The Sat klasa je apstraktna, pa ne možemo stvoriti njezinu instancu. Mogu se koristiti sljedeće tvorničke metode:

  • pomak (sat, trajanje) vraća sat koji je pomaknut navedenim Trajanje. Glavni slučaj upotrebe je simulacija trčanja u budućnosti ili prošlosti
  • systemUTC () - vraća sat koji predstavlja UTC vremensku zonu
  • fiksno (trenutno, ZoneId) - uvijek vraća isto Trenutak. Glavni slučaj za ovo je testiranje, gdje fiksni sat osigurava da testovi ne ovise o trenutnom satu

Istražit ćemo većinu metoda dostupnih u Sat razred.

2.1. trenutak()

Ova metoda vraća trenutak koji predstavlja trenutni trenutak definiran satom:

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

proizvest će:

2018-04-07T03: 59: 35.555Z

2.2. systemUTC ()

Ova metoda vraća a Sat objekt koji predstavlja trenutni trenutak u UTC zoni:

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

proizvest će:

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

2.3. sustav()

Ova statička metoda vraća Sat objekt za vremensku zonu identificiran datim ID-om vremenske zone:

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

proizvest će:

2018-04-04T18: 00: 31.376Z

2.4. systemDefaultZone ()

Ova statička metoda vraća a Sat objekt koji predstavlja trenutni trenutak i koristi zadanu vremensku zonu sustava na kojem je pokrenut:

Sat sata = Clock.systemDefaultZone (); System.out.println (sat);

Gornji redovi daju sljedeći rezultat (pod pretpostavkom da je naša zadana vremenska zona "Azija / Kalkuta"):

SystemClock [Azija / Kalkuta]

Isto ponašanje možemo postići dodavanjem ZoneId.systemDefault ():

Sat sata = Clock.system (ZoneId.systemDefault ());

2.5. milis ()

Ova metoda vraća trenutni trenutak sata u milisekundama. Osigurano je kako bi se omogućila uporaba sata u slučajevima korištenja visokih performansi u kojima bi stvaranje predmeta bilo neprihvatljivo. Ova se metoda može koristiti na mjestima na kojima bismo inače koristili System.currentTimeInMillis ():

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

proizvest će:

1523104441258

2.6. pomak ()

Ova statička metoda vraća trenutak s navedenog osnovnog sata s dodanim zadanim trajanjem.

Ako je trajanje negativno, rezultirajući trenutak sata bit će raniji od zadanog osnovnog sata.

Koristeći ofset, možemo dobiti trenutke u prošlosti i budućnosti određenog osnovnog sata. Ako prođemo nulto trajanje, dobit ćemo isti sat kao i zadani osnovni sat:

Clock baseClock = Clock.systemDefaultZone (); // rezultat sata bit će kasniji od baseClock Clock clock = Clock.offset (baseClock, Duration.ofHours (72)); System.out.println (clock5.instant ()); // sat s rezultatom bit će isti kao baseClock clock = Clock.offset (baseClock, Duration.ZERO); System.out.println (clock.instant ()); // rezultat sata bit će raniji od baseClock clock = Clock.offset (baseClock, Duration.ofHours (-72)); System.out.println (clock.instant ());

proizvest će:

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

2.7. označite ()

Ova statička metoda vraća trenutke s navedenog sata zaokruženo na najbližu pojavu određenog trajanja. Navedeno trajanje sata mora biti pozitivno:

Clock clockDefaultZone = Clock.systemDefaultZone (); Clock clocktick = Clock.tick (clockDefaultZone, Duration.ofSeconds (30)); System.out.println ("Zadana zona sata:" + clockDefaultZone.instant ()); System.out.println ("Oznaka sata:" + clocktick.instant ());

proizvest će:

Zadana zona sata: 2018-04-07T16: 42: 05.473Z Oznaka sata: 2018-04-07T16: 42: 00Z

2.8. tickSeconds ()

Ova statička metoda vraća trenutno trenutno otkucavanje u cijelim sekundama za zadanu vremensku zonu. Ovaj sat će uvijek imati nano-sekunde polje postavljeno na nulu:

ZoneId zoneId = ZoneId.of ("Azija / Kalkuta"); Sat sata = Clock.tickSeconds (zoneId); System.out.println (clock.instant ());

proizvest će:

2018-04-07T17: 40: 23Z

Isto se može postići uporabom označite ():

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

2.9. tickMinutes ()

Ova statička metoda vraća trenutno otkucavanje sata u cijelim minutama za navedenu vremensku zonu. Ovaj sat će uvijek imati nano-sekunde i sekunda polja postavljena na nulu:

ZoneId zoneId = ZoneId.of ("Azija / Kalkuta"); Sat sata = Clock.tickMinutes (zoneId); System.out.println (clock.instant ());

proizvest će:

2018-04-07T17: 26: 00Z

Isto se može postići uporabom označite ():

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

2.10. withZone ()

Ova metoda vraća kopiju ovog sata s drugom vremenskom zonom.

Ako imamo primjerak sata za određenu vremensku zonu, možemo napraviti kopiju tog sata za drugu vremensku zonu:

ZoneId zoneSingapore = ZoneId.of ("Azija / Singapur"); Clock clockSingapore = Clock.system (zoneSingapore); System.out.println (clockSingapore.instant ()); ZoneId zoneCalcutta = ZoneId.of ("Azija / Kalkuta"); Clock clockCalcutta = clockSingapore.withZone (zoneCalcutta); System.out.println (clockCalcutta.instant ());

proizvest će:

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

2.11. getZone ()

Ova metoda vraća vremensku zonu zadane Sat.

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

proizvest će:

Azija / Kalkuta

2.12. fiksno ()

Ova metoda vraća sat koji uvijek vraća isti trenutak. Glavni slučaj upotrebe ove metode je u testiranju, gdje fiksni sat osigurava da testovi ne ovise o trenutnom satu.

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

proizvest će:

Fiksni sat [2018-04-29T10: 15: 30Z, Azija / Kalkuta]

3. Zaključak

U ovom smo članku zašli u Javu Sat klase i različite načine na koje ga možemo koristiti s dostupnim metodama.

Kao i uvijek, primjeri koda dostupni su na GitHub-u.