Hvordan bestemme ukedagen ved å passere en spesifikk dato i Java?

1. Oversikt

I denne korte opplæringen ser vi hvordan du trekker ut ukedagen som et tall og som tekst fra en Java-dato.

2. Problem

Virksomhetslogikk trenger ofte ukedagen. Hvorfor? For det første varierer arbeidstid og servicenivå mellom arbeidsdager og helger. Derfor er det nødvendig for mange systemer å få dagen som et tall. Men vi trenger kanskje også dagen som en tekst for visning.

Så hvordan trekker vi ut ukedagen fra datoer i Java?

3. Løsning med java.util.Date

java.util.Date har vært Java-dataklassen siden Java 1.0. Kode som startet med Java versjon 7 eller lavere, bruker sannsynligvis denne klassen.

3.1. Ukedag som nummer

Først, vi trekker ut dagen som et tall ved hjelp av java.util.Kalender:

public static int getDayNumberOld (Date date) {Calendar cal = Calendar.getInstance (); cal.setTime (dato); retur cal.get (Calendar.DAY_OF_WEEK); }

Resultatet antall varierer fra 1 (søndag) til 7 (lørdag). Kalender definerer konstanter for dette: Kalender. SØNDAGKalender. LØRDAG.

3.2. Ukedag som tekst

Nå vi trekk ut dagen som tekst. Vi passerer i en Lokal for å bestemme språket:

public static String getDayStringOld (Date date, Locale locale) {DateFormat formatter = new SimpleDateFormat ("EEEE", locale); returformater.format (dato); }

Dette returnerer hele dagen på språket ditt, for eksempel "mandag" på engelsk eller "Montag" på tysk.

4. Løsning med java.time.LocalDate

Java 8 har gjennomgått håndtering av dato og klokkeslett og introdusert java.time.LocalDate for datoer. Derfor, Java-prosjekter som bare kjører på Java versjoner 8 eller høyere, bør bruke denne klassen!

4.1. Ukedag som nummer

Å trekke ut dagen som et tall er trivielt nå:

offentlig statisk int getDayNumberNew (LocalDate dato) {DayOfWeek dag = date.getDayOfWeek (); return day.getValue (); }

Det resulterende tallet varierer fortsatt fra 1 til 7. Men denne gangen, Mandag er 1 og søndag er 7! De ukedagen har sin egen enumUkedag. Som forventet, enum verdiene er MANDAGSØNDAG.

4.2. Ukedag som tekst

Nå trekker vi ut dagen som tekst igjen. Vi passerer også i en Lokal:

public static String getDayStringNew (LocalDate date, Locale locale) {DayOfWeek day = date.getDayOfWeek (); return day.getDisplayName (TextStyle.FULL, lokal) }

Akkurat som med java.util.Date, dette returnerer hele dagen på det valgte språket.

5. Konklusjon

I denne artikkelen hentet vi ukedagen fra Java-datoer. Vi så hvordan du kan returnere både et tall og en tekst ved hjelp av java.util.Date og java.time.LocalDate.

Som alltid er koden tilgjengelig på GitHub.