Sprievodca triedou hodín Java
1. Prehľad
V tejto príručke sa chystáme nahliadnuť do Javy Hodiny triedy z java.time balíček. Vysvetlíme, čo Hodiny trieda je a ako ju môžeme použiť.
2. The Hodiny Trieda
Hodiny bol pridaný do Java 8 a poskytuje prístup k okamžitému času pomocou najlepších dostupných systémových hodín a má byť použitý ako poskytovateľ času, ktorého je možné efektívne testovať.
Aktuálny dátum a čas závisia od časového pásma a pre globalizované aplikácie je potrebný poskytovateľ času, ktorý zabezpečí, aby sa dátum a čas vytvorili so správnym časovým pásmom.
Táto trieda nám pomáha vyskúšať, či zmeny v našom kóde fungujú s rôznymi časovými pásmami, alebo či - pri použití pevných hodín - tento čas neovplyvňuje náš kód.
The Hodiny trieda je abstraktná, takže nemôžeme vytvoriť jej inštanciu. Môžu sa použiť nasledujúce továrenské metódy:
- posun (hodiny, doba trvania) – vráti hodiny, ktoré sú posunuté o zadané Trvanie. Hlavným prípadom použitia je simulácia behu v budúcnosti alebo v minulosti
- systemUTC () - vráti hodiny predstavujúce časové pásmo UTC
- opravené (okamžité, ZoneId) - vracia vždy to isté Okamžité. Hlavným prípadom použitia je testovanie, kde pevné hodiny zaisťujú, že testy nezávisia od aktuálnych hodín
Budeme sa zaoberať väčšinou metód dostupných v Hodiny trieda.
2.1. instant ()
Táto metóda vracia okamih predstavujúci aktuálny okamih definovaný hodinami:
Hodiny hodiny = Clock.systemDefaultZone (); Instant instant = clock.instant (); System.out.println (okamžitý);
bude vyrábať:
2018-04-07T03: 59: 35.555Z
2.2. systemUTC ()
Táto metóda vracia a Hodiny objekt predstavujúci aktuálny okamih v zóne UTC:
Hodiny hodiny = Clock.systemUTC (); System.out.println ("čas UTC ::" + clock.instant ());
bude vyrábať:
UTC čas :: 2018-04-04T17: 40: 12,353Z
2.3. systém ()
Táto statická metóda vracia Hodiny objekt pre časové pásmo identifikovaný daným ID časového pásma:
Hodiny hodiny = Clock.system (ZoneId.of ("Ázia / Kalkata")); System.out.println (clock.instant ());
bude vyrábať:
04.04.201818: 00: 31,377Z
2.4. systemDefaultZone ()
Táto statická metóda vracia a Hodiny objekt predstavujúci aktuálny okamih a využívajúci predvolené časové pásmo systému, na ktorom beží:
Hodiny hodiny = Clock.systemDefaultZone (); System.out.println (hodiny);
Vyššie uvedené riadky poskytujú nasledujúci výsledok (za predpokladu, že naše predvolené časové pásmo je „Ázia / Kalkata“):
SystemClock [Asia / Calcutta]
Rovnaké správanie môžeme dosiahnuť prechodom ZoneId.systemDefault ():
Hodiny hodiny = Clock.system (ZoneId.systemDefault ());
2.5. millis ()
Táto metóda vráti aktuálny okamih hodín v milisekundách. Je to poskytované umožniť použitie hodín vo vysoko výkonných prípadoch použitia, keď by bolo vytvorenie objektu neprijateľné. Túto metódu je možné použiť na miestach, ktoré by sme inak použili System.currentTimeInMillis ():
Hodiny hodiny = Clock.systemDefaultZone (); System.out.println (clock.millis ());
bude vyrábať:
1523104441258
2.6. offset ()
Táto statická metóda vráti okamih zo zadaných základných hodín s pridanou zadanou dobou trvania.
Ak je trvanie záporné, potom bude výsledný okamih hodín skôr ako daný základný čas.
Použitím vyrovnať, môžeme získať okamihy v minulosti a budúcnosti daných základných hodín. Ak prejdeme nulovým trvaním, dostaneme rovnaké hodiny ako dané základné hodiny:
Hodiny baseClock = Clock.systemDefaultZone (); // výsledné hodiny budú neskôr ako baseClock Clock clock = Clock.offset (baseClock, Duration.ofHours (72)); System.out.println (clock5.instant ()); // výsledné hodiny budú rovnaké ako baseClock clock = Clock.offset (baseClock, Duration.ZERO); System.out.println (clock.instant ()); // výsledné hodiny budú skôr ako baseClock clock = Clock.offset (baseClock, Duration.ofHours (-72)); System.out.println (clock.instant ());
bude vyrábať:
2018-04-10T13: 24: 07.347Z 2018-04-07T13: 24: 07.348Z 2018-04-04T13: 24: 07.348Z
2.7. zaškrtnúť ()
Táto statická metóda vracia okamihy zo zadaných hodín zaokrúhlené na najbližší výskyt stanoveného trvania. Zadané trvanie hodín musí byť kladné:
Clock clockDefaultZone = Clock.systemDefaultZone (); Hodiny clocktick = Clock.tick (clockDefaultZone, Duration.ofSeconds (30)); System.out.println ("Predvolená zóna hodín:" + clockDefaultZone.instant ()); System.out.println ("Označiť hodiny:" + clocktick.instant ());
bude vyrábať:
Predvolená zóna hodín: 2018-04-07T16: 42: 05.473Z Hodiny: 2018-04-07T16: 42: 00Z
2.8. tickSeconds ()
Táto statická metóda vráti aktuálne okamžité tikanie v celých sekundách pre dané časové pásmo. Tieto hodiny budú mať vždy nanosekundu pole nastavené na nulu:
ZoneId zoneId = ZoneId.of ("Ázia / Kalkata"); Hodiny hodiny = Clock.tickSeconds (zoneId); System.out.println (clock.instant ());
bude vyrábať:
2018-04-07T17: 40: 23Z
To isté sa dá dosiahnuť použitím zaškrtnúť ():
Hodiny clock = Clock.tick (Clock.system (ZoneId.of ("Asia / Calcutta")), Duration.ofSeconds (1));
2.9. tickMinutes ()
Táto statická metóda vráti okamžité tikanie hodín v celých minútach pre zadané časové pásmo. Tieto hodiny budú mať vždy nanosekundu a druhá minúta polia nastavené na nulu:
ZoneId zoneId = ZoneId.of ("Ázia / Kalkata"); Hodiny hodiny = Clock.tickMinutes (zoneId); System.out.println (clock.instant ());
bude vyrábať:
2018-04-07T17: 26: 00Z
To isté sa dá dosiahnuť použitím zaškrtnúť ():
Hodiny clock = Clock.tick (Clock.system (ZoneId.of ("Asia / Calcutta")), Duration.ofMinutes (1));
2.10. withZone ()
Táto metóda vráti kópiu týchto hodín s iným časovým pásmom.
Ak máme inštanciu hodín pre konkrétne časové pásmo, môžeme vytvoriť kópiu týchto hodín pre rôzne časové pásma:
ZoneId zoneSingapore = ZoneId.of ("Ázia / Singapur"); Hodiny clockSingapore = Clock.system (zoneSingapore); System.out.println (clockSingapore.instant ()); ZoneId zoneCalcutta = ZoneId.of ("Ázia / Kalkata"); Hodiny clockCalcutta = clockSingapore.withZone (zoneCalcutta); System.out.println (clockCalcutta.instant ());
bude vyrábať:
2018-04-07T17: 55: 43.035Z 2018-04-07T17: 55: 43.035Z
2.11. getZone ()
Táto metóda vráti časové pásmo daného Hodiny.
Hodiny hodiny = Clock.systemDefaultZone (); ZoneId zóna = clock.getZone (); System.out.println (zone.getId ());
bude vyrábať:
Asia / Calcutta
2.12. pevné ()
Táto metóda vráti hodiny, ktoré vráti sa vždy v rovnakom okamihu. Hlavným prípadom použitia tejto metódy je testovanie, kde pevné hodiny zaisťujú, že testy nezávisia od aktuálnych hodín.
Hodiny fixedClock = Clock.fixed (Instant.parse ("2018-04-29T10: 15: 30,00Z"), ZoneId.of ("Ázia / Kalkata")); System.out.println (fixedClock);
bude vyrábať:
FixedClock [2018-04-29T10: 15: 30Z, Ázia / Kalkata]
3. Záver
V tomto článku sme sa ponorili do Javy Hodiny triedy a rôznymi spôsobmi, ako ju môžeme použiť s dostupnými metódami.
Príklady kódov sú ako vždy k dispozícii na stránkach GitHub.