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.