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.