Gids voor de Java Clock Class

1. Overzicht

In deze tutorial gaan we dat doen kijk in de Java Klok klasse uit de java.time pakket. We leggen uit wat de Klok class is en hoe we het kunnen gebruiken.

2. Het Klok Klasse

Klok is toegevoegd in Java 8 en biedt toegang tot een moment in de tijd met behulp van de best beschikbare systeemklok, en om te worden gebruikt als een tijdprovider die effectief kan worden gestopt voor testdoeleinden.

De huidige datum en tijd zijn afhankelijk van de tijdzone en voor geglobaliseerde toepassingen is een tijdprovider nodig om ervoor te zorgen dat de datum en tijd worden gemaakt met de juiste tijdzone.

Deze klasse helpt ons om te testen of onze codewijzigingen werken met verschillende tijdzones of - bij gebruik van een vaste klok - dat die tijd geen invloed heeft op onze code.

De Klok class is abstract, dus we kunnen er geen instantie van maken. De volgende fabrieksmethoden kunnen worden gebruikt:

  • offset (klok, duur) geeft een klok terug die is verschoven met het opgegeven Looptijd. De belangrijkste use case hiervoor is het simuleren van hardlopen in de toekomst of het verleden
  • systemUTC () - geeft een klok terug die de UTC-tijdzone vertegenwoordigt
  • vast (Instant, ZoneId) - geeft altijd hetzelfde terug Onmiddellijk. De belangrijkste use case hiervoor is testen, waarbij de vaste klok ervoor zorgt dat testen niet afhankelijk zijn van de huidige klok

We gaan de meeste methoden bekijken die beschikbaar zijn in het Klok klasse.

2.1. instant ()

Deze methode retourneert een moment dat het huidige moment vertegenwoordigt dat is gedefinieerd door de klok:

Klokklok = Clock.systemDefaultZone (); Instant instant = clock.instant (); System.out.println (instant);

zal produceren:

2018-04-07T03: 59: 35.555Z

2.2. systeemUTC ()

Deze methode retourneert een Klok object dat het huidige moment in de UTC-zone vertegenwoordigt:

Klokklok = Clock.systemUTC (); System.out.println ("UTC-tijd ::" + clock.instant ());

zal produceren:

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

2.3. systeem()

Deze statische methode retourneert het Klok object voor de tijdzone geïdentificeerd door de opgegeven tijdzone-id:

Klokklok = Clock.system (ZoneId.of ("Azië / Calcutta")); System.out.println (clock.instant ());

zal produceren:

2018-04-04T18: 00: 31.376Z

2.4. systemDefaultZone ()

Deze statische methode retourneert een Klok object dat het huidige moment vertegenwoordigt en de standaardtijdzone gebruikt van het systeem waarop het wordt uitgevoerd:

Klokklok = Clock.systemDefaultZone (); System.out.println (klok);

De bovenstaande regels leveren het volgende resultaat op (ervan uitgaande dat onze standaardtijdzone "Azië / Calcutta" is):

SystemClock [Azië / Calcutta]

We kunnen hetzelfde gedrag bereiken door te passen ZoneId.systemDefault ():

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

2.5. millis ()

Deze methode retourneert het huidige moment van de klok in milliseconden. Het is voorzien om het gebruik van de klok mogelijk te maken in gebruiksscenario's met hoge prestaties waar het maken van een object onaanvaardbaar zou zijn. Deze methode kan worden gebruikt op plaatsen waar we anders zouden hebben gewerkt System.currentTimeInMillis ():

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

zal produceren:

1523104441258

2.6. compensatie ()

Deze statische methode retourneert een moment van de opgegeven basisklok met de opgegeven duur toegevoegd.

Als de duur negatief is, zal het resulterende klokmoment eerder zijn dan de gegeven basisklok.

Gebruik makend van compensatiekunnen we momenten in het verleden en de toekomst van de gegeven basisklok krijgen. Als we een duur van nul passeren, krijgen we dezelfde klok als de gegeven basisklok:

Klok baseClock = Clock.systemDefaultZone (); // resultaatklok zal later zijn dan baseClock Clock clock = Clock.offset (baseClock, Duration.ofHours (72)); System.out.println (clock5.instant ()); // resultaatklok zal hetzelfde zijn als baseClock clock = Clock.offset (baseClock, Duration.ZERO); System.out.println (clock.instant ()); // resultaatklok zal eerder zijn dan baseClock clock = Clock.offset (baseClock, Duration.ofHours (-72)); System.out.println (clock.instant ());

zal produceren:

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

2.7. Kruis aan()

Deze statische methode retourneert instants van de opgegeven klok afgerond op het dichtstbijzijnde voorkomen van de opgegeven duur. De opgegeven klokduur moet positief zijn:

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

zal produceren:

Klok Standaardzone: 2018-04-07T16: 42: 05.473Z Klokvink: 2018-04-07T16: 42: 00Z

2.8. tickSeconds ()

Deze statische methode retourneert het huidige instant-tikken in hele seconden voor de gegeven tijdzone. Deze klok heeft altijd de nano-van-seconde veld ingesteld op nul:

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

zal produceren:

2018-04-07T17: 40: 23Z

Hetzelfde kan worden bereikt door te gebruiken Kruis aan():

Clock clock = Clock.tick (Clock.system (ZoneId.of ("Azië / Calcutta")), Duration.ofSeconds (1));

2.9. tickMinutes ()

Deze statische methode retourneert de klok onmiddellijk tikken in hele minuten voor de opgegeven tijdzone. Deze klok heeft altijd de nano-van-seconde en seconde van de minuut velden ingesteld op nul:

ZoneId zoneId = ZoneId.of ("Azië / Calcutta"); Klokklok = Clock.tickMinutes (zoneId); System.out.println (clock.instant ());

zal produceren:

2018-04-07T17: 26: 00Z

Hetzelfde kan worden bereikt door te gebruiken Kruis aan():

Clock clock = Clock.tick (Clock.system (ZoneId.of ("Azië / Calcutta")), Duration.ofMinutes (1));

2.10. met zone ()

Deze methode retourneert een kopie van deze klok met een andere tijdzone.

Als we een klokinstantie hebben voor een specifieke tijdzone, kunnen we een kopie van die klok maken voor een andere tijdzone:

ZoneId zoneSingapore = ZoneId.of ("Azië / Singapore"); Clock clockSingapore = Clock.system (zoneSingapore); System.out.println (clockSingapore.instant ()); ZoneId zoneCalcutta = ZoneId.of ("Azië / Calcutta"); Klok clockCalcutta = clockSingapore.withZone (zoneCalcutta); System.out.println (clockCalcutta.instant ());

zal produceren:

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

2.11. getZone ()

Deze methode retourneert de tijdzone van het opgegeven Klok.

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

zal produceren:

Azië / Calcutta

2.12. gemaakt()

Deze methode retourneert een klok die geeft altijd hetzelfde moment terug. De belangrijkste use case voor deze methode is testen, waarbij de vaste klok ervoor zorgt dat testen niet afhankelijk zijn van de huidige klok.

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

zal produceren:

FixedClock [2018-04-29T10: 15: 30Z, Azië / Calcutta]

3. Conclusie

In dit artikel zijn we in Java gedoken Klok class en de verschillende manieren waarop we het kunnen gebruiken met de beschikbare methoden.

Zoals altijd zijn de codevoorbeelden beschikbaar op GitHub.