Órák hozzáadása egy dátumhoz a Java-ban

1. Áttekintés

Java 8 előtt java.util.Dátum volt az egyik leggyakrabban használt osztály a dátum-idő értékek ábrázolására a Java-ban.

Aztán a Java 8 bemutatta java.time.LocalDateTime és java.time.ZonedDateTime. A Java 8 azt is lehetővé teszi számunkra, hogy egy adott időpontot ábrázoljunk az idővonalon java.time.Instant.

Ebben az oktatóanyagban megtanuljuk összeadni vagy kivonni n órák egy adott dátumtól és időponttól Java-ban. Először megvizsgálunk néhány szabványos Java dátummal és idővel kapcsolatos osztályt, majd bemutatunk néhány harmadik féltől származó lehetőséget.

Ha többet szeretne megtudni a Java 8 DateTime API-ról, javasoljuk, hogy olvassa el ezt a cikket.

2. java.util.Dátum

Ha Java 7-es vagy régebbi verziót használunk, használhatjuk a java.util.Dátum és java.util.Naptár osztályok a legtöbb dátum-idő kapcsolatos kezeléshez.

Lássuk, hogyan kell hozzáfűzni n órákat adott Dátum tárgy:

public Date addHoursToJavaUtilDate (dátum dátum, int óra) {Naptár naptár = Naptár.getInstance (); calendar.setTime (dátum); calendar.add (Naptár.HOUR_OF_DAY, óra); return calendar.getTime (); }

Vegye figyelembe, hogy Naptár.HOUR_OF_DAY 24 órás órára utal.

A fenti módszer egy újat ad vissza Dátum objektum, amelynek értéke akár (dátum + óra) vagy (dátum - óra), attól függően, hogy pozitív vagy negatív értéket adunk-e át órák illetőleg.

Tegyük fel, hogy van Java 8 alkalmazásunk, de mégis szeretnénk dolgozni java.util.Dátum példányok.

Ilyen esetben a következő alternatív megközelítést választhatjuk:

  1. Használat java.util.Dátumazonnali () módszer a Dátum kifogásolni a java.time.Instant példa
  2. Adjon meg egy konkrétat Időtartam hoz java.time.Instant objektum a plusz() módszer
  3. Helyreállítani a java.util.Dátum például a java.time.Instant kifogásolja a java.util.Date.from () módszer

Vessünk egy gyors pillantást erre a megközelítésre:

@Test public void givenJavaUtilDate_whenUsingToInstant_thenAddHours () {Date actualDate = new GregorianCalendar (2018, Calendar.JUNE, 25, 5, 0) .getTime (); Várható dátum = új GregorianCalendar (2018, Naptár. JÚNIUS, 25., 7., 0) .getTime (); assertThat (Date.from (actualDate.toInstant (). plus (Duration.ofHours (2)))) .isEqualTo (várhatóDátum); }

Azonban vegye figyelembe, hogy mindig javasoljuk az új DateTime API használatát minden Java 8 vagy újabb verziójú alkalmazáshoz.

3. java.time.LocalDateTime / ZonedDateTime

Java 8 vagy újabb verzióban órák hozzáadása bármelyikhez a java.time.LocalDateTime vagy java.time.ZonedDateTime a példány meglehetősen egyszerű és felhasználja a plusHours () módszer:

@Test public void givenLocalDateTime_whenUsingPlusHours_thenAddHours () {LocalDateTime actualDateTime = LocalDateTime .of (2018, Június 25, 5, 0 hónap); LocalDateTime várhatóDateTime = LocalDateTime. (2018. hónap, június, 25., 10., 0); assertThat (actualDateTime.plusHours (5)). isEqualTo (várhatóDateTime); }

Mi van, ha szeretnénk levonni néhány órát?

Az órák negatív értékének átadása a következőnek: plusHours () módszer nagyon jó lenne. Azonban ajánlott a mínusz óra () módszer:

@Test public void givenLocalDateTime_whenUsingMinusHours_thenSubtractHours () {LocalDateTime actualDateTime = LocalDateTime .of (2018, Június 25, 5, 0 hónap); LocalDateTime várhatóDateTime = LocalDateTime .of (2018, Június 25, 3, 0, hónap); assertThat (actualDateTime.minusHours (2)). isEqualTo (várhatóDátumTime); }

A plusHours () és mínusz óra () módszerek a java.time.ZonedDateTime pontosan ugyanúgy működik.

4. java.time.Instant

Mint tudjuk, java.time.Instant a Java 8-ban bevezetett DateTime API egy konkrét momentumot képvisel az idővonalon.

Néhány órát hozzáadni a Azonnali objektumot használhatjuk plusz() módszer a java.time.temporal.TemporalAmount:

@Test public void givenInstant_whenUsingAddHoursToInstant_thenAddHours () {Instant actualValue = Instant.parse ("2018-06-25T05: 12: 35Z"); Azonnali várható érték = Instant.parse ("2018-06-25T07: 12: 35Z"); assertThat (ténylegesValue.plus (2, ChronoUnit.HOURS)) .isEqualTo (várható érték); }

Hasonlóképpen a mínusz() módszer használható egy adott kivonására TemporalAmount.

5. Apache Commons DateUtils

A DateUtils osztály az Apache Commons Lang könyvtárból kitesz a statikusaddHours () módszer:

public static Date addHours (dátum dátuma, int összeg)

A módszer átveszi a java.util.Dátum objektum együtt egy összeg hozzá kívánjuk adni, amelynek értéke lehet pozitív vagy negatív.

Egy új java.util.Dátum az objektum eredményként kerül visszaadásra:

@Test public void givenJavaUtilDate_whenUsingApacheCommons_thenAddHours () {Date actualDate = new GregorianCalendar (2018, Calendar.JUNE, 25, 5, 0) .getTime (); Várható dátum = új GregorianCalendar (2018, Naptár. JÚNIUS, 25., 7., 0) .getTime (); assertThat (DateUtils.addHours (aktuálisDátum, 2)). isEqualTo (várhatóDátum); }

A legfrissebb verziója Apache Commons Lang a Maven Centralnál érhető el.

6. Joda idő

A Joda Time a Java 8 DateTime API alternatívája, és biztosítja a sajátját Dátum idő megvalósítások.

A legtöbb Dátum idő a kapcsolódó osztályok kiteszik plusHours () és mínusz óra () módszerek, amelyek segítenek nekünk egy adott óraszámot hozzáadni vagy kivonni az a-ból Dátum idő tárgy.

Nézzünk meg egy példát:

@Test public void givenJodaDateTime_whenUsingPlusHoursToDateTime_thenAddHours () {DateTime actualDateTime = new DateTime (2018, 5, 25, 5, 0); DateTime várható dátumTime = új dátumidő (2018, 5, 25, 7, 0); assertThat (actualDateTime.plusHours (2)). isEqualTo (várhatóDateTime); }

Könnyedén ellenőrizhetjük a legfrissebb elérhető verzióját Joda idő a Maven Centralnál.

7. Következtetés

Ebben az oktatóanyagban számos módszert ismertettünk, amellyel adott óraszámot hozzáadhatunk vagy kivonhatunk a Java standard dátum-idő értékéből.

Alternatívaként néztünk néhány harmadik fél könyvtárát is. Szokás szerint a teljes forráskód elérhető a GitHubon.


$config[zx-auto] not found$config[zx-overlay] not found