Veiledning til Java Clock Class

1. Oversikt

I denne opplæringen skal vi se inn i Java Klokke klasse fra java.time pakke. Vi forklarer hva Klokke klasse er og hvordan vi kan bruke den.

2. Den Klokke Klasse

Klokke ble lagt til i Java 8 og gir tilgang til et øyeblikk i tid ved å bruke den beste tilgjengelige systemklokken, og til å brukes som en tidsleverandør som effektivt kan stubbes for testformål.

Gjeldende dato og klokkeslett avhenger av tidssonen, og for globaliserte applikasjoner er en tidstilbyder nødvendig for å sikre at dato og klokkeslett opprettes med riktig tidssone.

Denne klassen hjelper oss å teste at koden endres, fungerer med forskjellige tidssoner eller - når vi bruker en fast klokke - påvirker ikke tiden vår kode.

De Klokke klassen er abstrakt, så vi kan ikke lage en forekomst av den. Følgende fabrikkmetoder kan brukes:

  • forskyvning (klokke, varighet) returnerer en klokke som blir forskjøvet av det angitte Varighet. Hovedbrukssaken for dette er å simulere løp i fremtiden eller fortiden
  • systemUTC () - returnerer en klokke som representerer UTC-tidssonen
  • fast (Instant, ZoneId) - returnerer alltid det samme Umiddelbar. Den ledende brukssaken for dette er i testing, der den faste klokken sørger for at testene ikke er avhengige av gjeldende klokke

Vi skal se på de fleste metodene som er tilgjengelige i Klokke klasse.

2.1. umiddelbar()

Denne metoden returnerer et øyeblikk som representerer det nåværende øyeblikket definert av klokken:

Clock Clock = Clock.systemDefaultZone (); Øyeblikkelig øyeblikkelig = clock.instant (); System.out.println (øyeblikkelig);

vil produsere:

2018-04-07T03: 59: 35.555Z

2.2. systemUTC ()

Denne metoden returnerer a Klokke objekt som representerer det nåværende øyeblikket i UTC-sonen:

Clock Clock = Clock.systemUTC (); System.out.println ("UTC-tid ::" + klokke.instant ());

vil produsere:

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

2.3. system()

Denne statiske metoden returnerer Klokke objekt for tidssonen identifisert av den gitte tidssone-ID:

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

vil produsere:

2018-04-04T18: 00: 31.376Z

2.4. systemDefaultZone ()

Denne statiske metoden returnerer a Klokke objekt som representerer gjeldende øyeblikk og bruker standard tidssone til systemet det kjører på:

Clock Clock = Clock.systemDefaultZone (); System.out.println (klokke);

Ovennevnte linjer gir følgende resultat (forutsatt at vår tidssone er "Asia / Calcutta"):

SystemClock [Asia / Calcutta]

Vi kan oppnå den samme oppførselen ved å passere ZoneId.systemDefault ():

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

2.5. millis ()

Denne metoden returnerer klokkens nåværende øyeblikk i millisekunder. Det er gitt for å tillate bruk av klokken i høyytelsesbrukstilfeller der oppretting av et objekt ville være uakseptabelt. Denne metoden kan brukes på steder der vi ellers hadde brukt System.currentTimeInMillis ():

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

vil produsere:

1523104441258

2.6. forskyvning ()

Denne statiske metoden returnerer et øyeblikk fra den angitte baseklokken med den angitte varigheten lagt til.

Hvis varigheten er negativ, vil det resulterende klokkeøyeblikket være tidligere enn den gitte baseklokken.

Ved hjelp av forskyvning, kan vi få øyeblikk i fortiden og fremtiden til den gitte baseklokken. Hvis vi passerer null varighet, får vi samme klokke som gitt grunnklokke:

Clock baseClock = Clock.systemDefaultZone (); // resultatklokke vil være senere enn baseClock Clock Clock = Clock.offset (baseClock, Duration.ofHours (72)); System.out.println (clock5.instant ()); // resultatklokke vil være den samme som baseClock Clock = Clock.offset (baseClock, Duration.ZERO); System.out.println (clock.instant ()); // resultatklokke vil være tidligere enn baseClock Clock = Clock.offset (baseClock, Duration.ofHours (-72)); System.out.println (clock.instant ());

vil produsere:

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

2.7. sett kryss()

Denne statiske metoden returnerer øyeblikk fra den angitte klokken avrundet til nærmeste forekomst av den angitte varigheten. Den angitte klokkevarigheten må være positiv:

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

vil produsere:

Clock Default Zone: 2018-04-07T16: 42: 05.473Z Clock tick: 2018-04-07T16: 42: 00Z

2.8. tickSeconds ()

Denne statiske metoden returnerer gjeldende øyeblikkelig tikk i hele sekunder for den gitte tidssonen. Denne klokken vil alltid ha nano-of-second felt satt til null:

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

vil produsere:

2018-04-07T17: 40: 23Z

Det samme kan oppnås ved å bruke sett kryss():

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

2.9. tickMinutes ()

Denne statiske metoden returnerer klokken øyeblikkelig tikk i hele minutter for den angitte tidssonen. Denne klokken vil alltid ha nano-of-second og sekund-av-minutt felt satt til null:

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

vil produsere:

2018-04-07T17: 26: 00Z

Det samme kan oppnås ved å bruke sett kryss():

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

2.10. withZone ()

Denne metoden returnerer en kopi av denne klokken med en annen tidssone.

Hvis vi har en klokkeinstans for en bestemt tidssone, kan vi lage en kopi av den klokken for en annen tidssone:

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

vil produsere:

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

2.11. getZone ()

Denne metoden returnerer tidssonen til det gitte Klokke.

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

vil produsere:

Asia / Calcutta

2.12. fikset()

Denne metoden returnerer en klokke som returnerer alltid samme øyeblikk. Hovedbrukssaken for denne metoden er i testing, der den faste klokken sørger for at testene ikke er avhengige av gjeldende klokke.

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

vil produsere:

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

3. Konklusjon

I denne artikkelen dukker vi inn i Java Klokke klasse og de forskjellige måtene vi kan bruke den på med tilgjengelige metoder.

Som alltid er kodeeksemplene tilgjengelige på GitHub.