A hét számának megszerzése bármilyen dátumtól

1. Bemutatkozás

Ebben a cikkben több olyan opciót fogunk megvizsgálni, amelyeket Java-ban használhatunk a hét számának megszerzésére egy adott dátumra. Először megvizsgálunk néhány lehetőséget a régi kódok használatához a Java 8 előtti osztályok használatával. Ezután megnézzük az újabb Date Time API-t a java.time csomagot, amelyet a Java 8-ban vezettek be.

2. Java 8 előtt

A Java 8 előtt a dátum és az idő számítását főként a Dátum és Naptár osztályok. Jellemzően létrehozunk egy Naptár, majd különböző állandók segítségével ki lehet nyerni belőle a szükséges információkat.

2.1. Heti szám használata Naptár Mezők

Nézzük meg az első példánkat:

Naptár naptár = Calendar.getInstance (területi beállítás); calendar.set (év, hónap, nap); int weekOfYear = calendar.get (Naptár.WEEK_OF_YEAR);

Egyszerűen létrehozunk egy Naptár példány az adott Területi beállítás és állítsuk be az évet, a hónapot és a napot, végül pedig megkapjuk a WEEK_OF_YEAR mező a naptár tárgy. Ez a hét számát adja vissza az adott évben.

Most nézzük meg, hogyan hívhatjuk le ezt a módszert az egyik egységtesztünkből:

@Test public void givenDateUsingFieldsAndLocaleItaly_whenGetWeekNumber_thenWeekIsReturnedCorrectly () {Naptár naptár = Calendar.getInstance (Locale.ITALY); calendar.set (2020, 10, 22); assertEquals (47, calendar.get (Naptár.WEEK_OF_YEAR)); }

Óvatosnak kell lennünk, amikor ezt a megközelítést alkalmazzuk, mivel a hónap mező a Naptár osztály nulla alapú. Ez azt jelenti, hogy ha decembert akarunk megadni, akkor a 11-es számot kell használnunk, ami gyakran zavart okozhat.

2.2. Heti szám használata Területi beállítás Beállítások

Ebben az utolsó előtti példában megvizsgáljuk, hogy milyen hatással van néhány további beállítás alkalmazása a mi rendszerünkre Naptár lehet:

Naptár naptár = Calendar.getInstance (); calendar.setFirstDayOfWeek (firstDayOfWeek); calendar.setMinimalDaysInFirstWeek (minimalDaysInFirstWeek); calendar.set (év, hónap, nap); int weekOfYear = calendar.get (Naptár.WEEK_OF_YEAR); 

A Naptár osztály két módszert határoz meg:

  • setFirstDayOfWeek
  • setMinimalDaysInFirstWeek

Ezek a módszerek hatással vannak a hét számának kiszámítására. Normál esetben mindkét értéket a Területi beállítás a Naptár. De a hét első napját és az év első hetének minimális napjait manuálisan is beállíthatja.

2.3. Területi beállítás Különbségek

A területi beállítás fontos szerepet játszik a hét számításában:

@Test public void givenDateUsingFieldsAndLocaleCanada_whenGetWeekNumber_thenWeekIsReturnedCorrectly () {Calendar calendar = Calendar.getInstance (Locale.CANADA); calendar.set (2020, 10, 22); assertEquals (48, calendar.get (Naptár.WEEK_OF_YEAR)); } 

Ebben az egységtesztben csak a Naptár használni Locale.CANADA ahelyett Locale.ITALY és most a visszaadott hét száma az 48 ahelyett 47.

Mindkét eredmény helyes. Mint korábban említettük, ez azért történik, mert mindegyik Területi beállítás különböző beállításai vannak a setFirstDayOfWeek és setMinimalDaysInFirstWeek mód.

3. Java 8 Dátum idő API

A Java 8 új API-kat vezetett be a Dátum és Idő az idősebbek hiányosságainak orvoslására java.util.Dátum és java.util.Naptár.

Ebben a szakaszban megvizsgálunk néhány lehetőséget a hét számának lekérésére a dátumtól ezen újabb API használatával.

3.1. Heti szám beszerzése a numerikus értékek használatával

Hasonlóképpen, ahogyan korábban láttuk Naptár, az év, hónap és nap értékeket közvetlenül át is adhatjuk LocalDate:

LocalDate date = LocalDate.of (év, hónap, nap); int weekOfYear = date.get (WeekFields.of (locale) .weekOfYear ()); 

Előnye a Java 8 előtti példáinkkal szemben az, hogy nincs azzal a problémával, hogy a hónap mező nulla alapú legyen.

3.2. Heti szám használata Chronofield

Ebben az utolsó példában megtudjuk, hogyan kell használni a ChronoField felsorolás, amely végrehajtja a TemporalField felület:

LocalDate date = LocalDate.of (év, hónap, nap); int weekOfYear = date.get (ChronoField.ALIGNED_WEEK_OF_YEAR); 

Ez a példa hasonló a Naptár.WEEK_OF_YEARint állandó, amit korábban láttunk, de használjuk ChronoField.ALIGNED_WEEK_OF_YEAR.

4. Következtetés

Ebben a gyors bemutatóban számos módszert szemléltettünk, hogyan lehet a hét számát dátumról lekérni a sima Java használatával.

Mint mindig, a cikk teljes forráskódja elérhető a GitHubon.


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