Sådan får du starten og slutningen af en dag ved hjælp af Java
1. Oversigt
I denne korte vejledning vi lærer at komme i gang og slutningen af en dag i Java, ved hjælp af enkle, enkle eksempler til forskellige scenarier.
Vi bruger Java's 8 Date / Time API til at opbygge disse eksempler.
Hvis du vil læse lidt mere om Java's 8 Date and Time-bibliotek, inden du fortsætter, kan du komme i gang her.
2. Fra en LocalDate Objekt
Lad os først se, hvordan vi kan få starten eller slutningen af en dag, der gives os som en LocalDate objekt, såsom:
LocalDate localDate = LocalDate.parse ("23.06.2018");
2.1. atStartOfDay ()
Den enkleste måde at få en LocalDateTime repræsenterer begyndelsen på en bestemt dag er ved hjælp af atStartOfDay () metode:
LocalDateTime startOfDay = localDate.atStartOfDay ();
Denne metode er overbelastet, så hvis vi vil have en ZonedDateTime ud fra det kan vi gøre det ved at specificere ZoneId:
ZonedDateTime startOfDay = localDate.atStartOfDay (ZoneId.of ("Europe / Paris"));
2.2. af()
En anden måde, hvorpå vi kan opnå det samme resultat, er ved at bruge af() metode, der giver en LocalDate og en af Lokal tid'S statiske felter:
LocalDateTime startOfDay = LocalDateTime.of (localDate, LocalTime.MIDNIGHT);
Lokal tid tilbyder følgende statiske felter: MIDNAT (00:00), MIN (00:00), MIDDAG (12:00) og MAX(23:59:59.999999999).
Derfor, hvis vi ønsker at få slutningen af dagen, vil vi bruge MAX værdi.
Lad os prøve det, men med en anden metode.
2.3. på tidspunktet()
Denne metode er overbelastet, så vi kan specificere den ønskede tid ved hjælp af timer, minutter, sekunder eller endda nanosekunder.
I dette tilfælde bruger vi alligevel Lokal tid'S MAX felt som argument for at få det sidste øjeblik på den givne dag:
LocalDateTime startOfDay = localDate.atTime (LocalTime.MAX);
2.4. atDate ()
Dette eksempel ligner de foregående, men denne gang bruger vi atDate () metode til en Lokal tid objekt, der passerer LocalDate som argumentet:
LocalDateTime endOfDate = LocalTime.MAX.atDate (localDate);
3. Fra en LocalDateTime Objekt
Det siger næsten sig selv, at vi kan få LocalDate fra det, og brug derefter en af metoderne i afsnit 2 for at få slutningen eller starten på dagen fra det:
LocalDateTime localDateTime = LocalDateTime .parse ("2018-06-23T05: 55: 55"); LocalDateTime endOfDate = localDateTime .toLocalDate (). AtTime (LocalTime.MAX);
Men i dette afsnit analyserer vi en anden metode for at få objektet med dets tidsafsnit indstillet til starten eller slutningen af dagen direkte fra en anden given LocalDateTime objekt.
3.1. med()
Alle klasser, der implementerer Temporal grænseflade kan bruge denne metode.
I dette tilfælde bruger vi signaturen til den metode, der tager en TemporalField (især en af ChronoField Enum værdier) og a lang argument som den nye værdi af feltet:
LocalDateTime endOfDate = localDateTime.with (ChronoField.NANO_OF_DAY, LocalTime.MAX.toNanoOfDay ());
4. Fra en ZonedDateTime Objekt
Hvis vi får en ZonedDateTime, vi kan bruge med() metode, da den implementerer Temporal interface såvel:
ZonedDateTime startofDay = zonedDateTime.with (ChronoField.HOUR_OF_DAY, 0);
5. Konklusion
For at opsummere har vi analyseret mange forskellige måder at få starten og slutningen af en dag i Java på for mange forskellige case-scenarier.
Endelig har vi lært om indsigten i Java's 8 Date and Time-biblioteksklasser og blev fortrolig med mange af dets klasser og grænseflader.
Som altid kan alle eksemplerne fås i vores GitHub-arkiv.