Vejledning til Java Clock Class

1. Oversigt

I denne vejledning skal vi kig ind i Java Ur klasse fra java.tid pakke. Vi forklarer, hvad Ur klasse er, og hvordan vi kan bruge den.

2. Den Ur Klasse

Ur blev tilføjet i Java 8 og giver adgang til et øjeblik ved hjælp af det bedste tilgængelige systemur og til at blive brugt som en tidsudbyder, der effektivt kan stubbes til testformål.

Den aktuelle dato og tid afhænger af tidszonen, og for globaliserede applikationer er en tidsudbyder nødvendig for at sikre, at datoen og klokkeslættet oprettes med den korrekte tidszone.

Denne klasse hjælper os med at teste, at vores kodeændringer fungerer med forskellige tidszoner, eller - når vi bruger et fast ur - påvirker tiden ikke vores kode.

Det Ur klasse er abstrakt, så vi kan ikke oprette en forekomst af den. Følgende fabriksmetoder kan anvendes:

  • forskydning (ur, varighed) returnerer et ur, der er forskudt af det angivne Varighed. Den vigtigste brugssag til dette er at simulere kørsel i fremtiden eller fortiden
  • systemUTC () - returnerer et ur, der repræsenterer UTC-tidszonen
  • fast (Øjeblikkelig, ZoneId) - returnerer altid det samme Øjeblikkelig. Den førende brugssag til dette er i test, hvor det faste ur sikrer, at test ikke afhænger af det aktuelle ur

Vi vil undersøge de fleste af de tilgængelige metoder i Ur klasse.

2.1. øjeblikkelig()

Denne metode returnerer et øjeblik, der repræsenterer det aktuelle øjeblik defineret af uret:

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

vil producere:

2018-04-07T03: 59: 35.555Z

2.2. systemUTC ()

Denne metode returnerer a Ur objekt, der repræsenterer det aktuelle øjeblik i UTC-zonen:

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

vil producere:

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

2.3. system()

Denne statiske metode returnerer Ur objekt til tidszonen identificeret ved det givne tidszone-id:

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

vil producere:

2018-04-04T18: 00: 31.376Z

2.4. systemDefaultZone ()

Denne statiske metode returnerer a Ur objekt, der repræsenterer det aktuelle øjeblik og bruger standardtidszonen for det system, det kører på:

Urur = Clock.systemDefaultZone (); System.out.println (ur);

Ovenstående linjer producerer følgende resultat (forudsat at vores standard tidszone er "Asia / Calcutta"):

SystemClock [Asien / Calcutta]

Vi kan opnå den samme adfærd ved at passere ZoneId.systemDefault ():

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

2.5. millis ()

Denne metode returnerer urets nuværende øjeblik i millisekunder. Det er givet at tillade brug af uret i højtydende brugstilfælde, hvor oprettelsen af ​​et objekt ville være uacceptabelt. Denne metode kan bruges på steder, hvor vi ellers havde brugt System.currentTimeInMillis ():

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

vil producere:

1523104441258

2.6. forskydning ()

Denne statiske metode returnerer et øjeblik fra det specificerede basisur med den angivne varighed tilføjet.

Hvis varigheden er negativ, vil det resulterende ur-øjeblik være tidligere end det givne basisur.

Ved brug af forskudt, kan vi få øjeblikke i fortiden og fremtiden for det givne basisur. Hvis vi passerer nul varighed, får vi det samme ur som det givne basisur:

Clock baseClock = Clock.systemDefaultZone (); // resultatur vil være senere end baseClock Clock clock = Clock.offset (baseClock, Duration.ofHours (72)); System.out.println (clock5.instant ()); // resultat ur vil være det samme som baseClock ur = Clock.offset (baseClock, Duration.ZERO); System.out.println (clock.instant ()); // resultaturet vil være tidligere end baseClock-uret = Clock.offset (baseClock, Duration.ofHours (-72)); System.out.println (clock.instant ());

vil producere:

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

2.7. kryds ()

Denne statiske metode returnerer øjeblikke fra det angivne ur afrundet til nærmeste forekomst af den angivne varighed. Den angivne urvarighed skal 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 producere:

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

2.8. tickSeconds ()

Denne statiske metode returnerer det aktuelle øjeblikkelige ticking i hele sekunder for den givne tidszone. Dette ur vil altid have nano-of-second felt indstillet til nul:

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

vil producere:

2018-04-07T17: 40: 23Z

Det samme kan opnås ved hjælp af kryds ():

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

2.9. tickMinutes ()

Denne statiske metode returnerer uret øjeblikkeligt tikkende i hele minutter i den angivne tidszone. Dette ur vil altid have nano-of-second og andet minut felter sat til nul:

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

vil producere:

2018-04-07T17: 26: 00Z

Det samme kan opnås ved hjælp af kryds ():

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

2.10. withZone ()

Denne metode returnerer en kopi af dette ur med en anden tidszone.

Hvis vi har en urinstans til en bestemt tidszone, kan vi lave en kopi af uret til en anden tidszone:

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

vil producere:

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

2.11. getZone ()

Denne metode returnerer tidszonen for det givne Ur.

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

vil producere:

Asien / Calcutta

2.12. fast ()

Denne metode returnerer et ur, der returnerer altid det samme øjeblik. Hovedanvendelsen af ​​denne metode er i test, hvor det faste ur sikrer, at test ikke er afhængig af det aktuelle ur.

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

vil producere:

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

3. Konklusion

I denne artikel dykker vi ind i Java Ur klasse og de forskellige måder, vi kan bruge den på med de tilgængelige metoder.

Som altid er kodeeksemplerne tilgængelige på GitHub.