Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> Java

Java 8: De Robuuste Nieuwe Date/Time API

Met Java 8 wordt een nieuwe Date-Time API geïntroduceerd om de volgende tekortkomingen van de oude date-time API op te lossen:

  • Niet thread-safe − java.util.Date is niet thread-safe, waardoor ontwikkelaars te maken krijgen met gelijktijdigheidsproblemen. De nieuwe date-time API is immuteerbaar en heeft geen setter-methoden.

  • Slecht ontwerp − Standaard Date begint bij 1900, maand begint bij 1, en dag begint bij 0, wat geen uniformiteit oplevert. De oude API had minder directe methoden voor datumoperaties. De nieuwe API biedt talloze hulpmethoden voor dergelijke operaties.

  • Moeilijke tijdzone-afhandeling − Ontwikkelaars moesten veel code schrijven om om te gaan met timezone-kwesties. De nieuwe API is ontwikkeld met domeinspecifiek ontwerp in gedachten.

Java 8 introduceert een nieuwe date-time API onder het pakket java.time. Hieronder volgen enkele van de belangrijke klassen die in het java.time-pakket zijn geïntroduceerd:

  • Local − Vereenvoudigde date-time API zonder de complexiteit van timezone-afhandeling.

  • Zoned − Gespecialiseerde date-time API om met diverse timezones om te gaan.

Local Date-Time API

LocalDate, LocalTime en LocalDateTime klassen vereenvoudigen de ontwikkeling waar timezones niet vereist zijn. Laten we ze in actie zien.

Maak het volgende Java-programma aan met een editor naar keuze in, zeg, C:\> JAVA.

Java8Tester.java

Live Demo
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.LocalDateTime;
import java.time.Month;

public class Java8Tester {
    public static void main(String args[]) {
        Java8Tester java8tester = new Java8Tester();
        java8tester.testLocalDateTime();
    }
    
    public void testLocalDateTime() {
        // Haal de huidige datum en tijd op
        LocalDateTime currentTime = LocalDateTime.now();
        System.out.println("Huidige DateTime: " + currentTime);
        
        LocalDate date1 = currentTime.toLocalDate();
        System.out.println("date1: " + date1);
        
        Month month = currentTime.getMonth();
        int day = currentTime.getDayOfMonth();
        int seconds = currentTime.getSecond();
        System.out.println("Maand: " + month + " dag: " + day + " seconden: " + seconds);
        
        LocalDateTime date2 = currentTime.withDayOfMonth(10).withYear(2012);
        System.out.println("date2: " + date2);
        
        // 12 december 2014
        LocalDate date3 = LocalDate.of(2014, Month.DECEMBER, 12);
        System.out.println("date3: " + date3);
        
        // 22 uur 15 minuten
        LocalTime date4 = LocalTime.of(22, 15);
        System.out.println("date4: " + date4);
        
        // Parse een string
        LocalTime date5 = LocalTime.parse("20:15:30");
        System.out.println("date5: " + date5);
    }
}

Resultaat Verifiëren

Compileer de klasse met de javac compiler als volgt:

C:\JAVA>javac Java8Tester.java

Voer nu de Java8Tester uit als volgt:

C:\JAVA>java Java8Tester

Het zou de volgende output moeten produceren:

Huidige DateTime: 2014-12-09T11:00:45.457
date1: 2014-12-09
Maand: DECEMBER dag: 9 seconden: 45
date2: 2012-12-10T11:00:45.457
date3: 2014-12-12
date4: 22:15
date5: 20:15:30

Zoned Date-Time API

Zoned date-time API wordt gebruikt wanneer tijdzone in aanmerking moet worden genomen. Laten we ze in actie zien.

Maak het volgende Java-programma aan met een editor naar keuze in, zeg, C:\> JAVA.

Java8Tester.java

Live Demo
import java.time.ZonedDateTime;
import java.time.ZoneId;

public class Java8Tester {
    public static void main(String args[]) {
        Java8Tester java8tester = new Java8Tester();
        java8tester.testZonedDateTime();
    }
    
    public void testZonedDateTime() {
        // Haal de huidige datum en tijd op
        ZonedDateTime date1 = ZonedDateTime.parse("2007-12-03T10:15:30+05:30[Asia/Karachi]");
        System.out.println("date1: " + date1);
        
        ZoneId id = ZoneId.of("Europe/Paris");
        System.out.println("ZoneId: " + id);
        
        ZoneId currentZone = ZoneId.systemDefault();
        System.out.println("CurrentZone: " + currentZone);
    }
}

Resultaat Verifiëren

Compileer de klasse met de javac compiler als volgt:

C:\JAVA>javac Java8Tester.java

Voer nu de Java8Tester uit als volgt:

C:\JAVA>java Java8Tester

Het zou de volgende output moeten produceren:

date1: 2007-12-03T10:15:30+05:00[Asia/Karachi]
ZoneId: Europe/Paris
CurrentZone: Etc/UTC

Chrono Units Enum

java.time.temporal.ChronoUnit enum is in Java 8 toegevoegd om de gehele waarden te vervangen die in de oude API werden gebruikt om dag, maand, etc. weer te geven. Laten we ze in actie zien.

Maak het volgende Java-programma aan met een editor naar keuze in, zeg, C:\> JAVA.

Java8Tester.java

Live Demo
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;

public class Java8Tester {
    public static void main(String args[]) {
        Java8Tester java8tester = new Java8Tester();
        java8tester.testChromoUnits();
    }
    
    public void testChromoUnits() {
        // Haal de huidige datum op
        LocalDate today = LocalDate.now();
        System.out.println("Huidige datum: " + today);
        
        // Voeg 1 week toe aan de huidige datum
        LocalDate nextWeek = today.plus(1, ChronoUnit.WEEKS);
        System.out.println("Volgende week: " + nextWeek);
        
        // Voeg 1 maand toe aan de huidige datum
        LocalDate nextMonth = today.plus(1, ChronoUnit.MONTHS);
        System.out.println("Volgende maand: " + nextMonth);
        
        // Voeg 1 jaar toe aan de huidige datum
        LocalDate nextYear = today.plus(1, ChronoUnit.YEARS);
        System.out.println("Volgend jaar: " + nextYear);
        
        // Voeg 10 jaar toe aan de huidige datum
        LocalDate nextDecade = today.plus(1, ChronoUnit.DECADES);
        System.out.println("Datum over tien jaar: " + nextDecade);
    }
}

Resultaat Verifiëren

Compileer de klasse met de javac compiler als volgt:

C:\JAVA>javac Java8Tester.java

Voer nu de Java8Tester uit als volgt:

C:\JAVA>java Java8Tester

Het zou het volgende resultaat moeten produceren:

Huidige datum: 2014-12-10
Volgende week: 2014-12-17
Volgende maand: 2015-01-10
Volgend jaar: 2015-12-10
Datum over tien jaar: 2024-12-10

Period en Duration

Met Java 8 worden twee gespecialiseerde klassen geïntroduceerd om met tijdsverschillen om te gaan:

  • Period − Het gaat om datum-gebaseerde hoeveelheden tijd.

  • Duration − Het gaat om tijd-gebaseerde hoeveelheden tijd.

Laten we ze in actie zien.

Maak het volgende Java-programma aan met een editor naar keuze in, zeg, C:\> JAVA.

Java8Tester.java

Live Demo
import java.time.temporal.ChronoUnit;
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.Duration;
import java.time.Period;

public class Java8Tester {
    public static void main(String args[]) {
        Java8Tester java8tester = new Java8Tester();
        java8tester.testPeriod();
        java8tester.testDuration();
    }
    
    public void testPeriod() {
        // Haal de huidige datum op
        LocalDate date1 = LocalDate.now();
        System.out.println("Huidige datum: " + date1);
        
        // Voeg 1 maand toe aan de huidige datum
        LocalDate date2 = date1.plus(1, ChronoUnit.MONTHS);
        System.out.println("Volgende maand: " + date2);
        
        Period period = Period.between(date2, date1);
        System.out.println("Period: " + period);
    }
    
    public void testDuration() {
        LocalTime time1 = LocalTime.now();
        Duration twoHours = Duration.ofHours(2);
        LocalTime time2 = time1.plus(twoHours);
        Duration duration = Duration.between(time1, time2);
        System.out.println("Duration: " + duration);
    }
}

Resultaat Verifiëren

Compileer de klasse met de javac compiler als volgt:

C:\JAVA>javac Java8Tester.java

Voer nu de Java8Tester uit als volgt:

C:\JAVA>java Java8Tester

Het zou de volgende output moeten produceren:

Huidige datum: 2014-12-10
Volgende maand: 2015-01-10
Period: P-1M
Duration: PT2H

Temporal Adjusters

TemporalAdjuster wordt gebruikt om datum-wiskunde uit te voeren. Bijvoorbeeld: "Tweede zaterdag van de maand" of "Volgende dinsdag". Laten we ze in actie zien.

Maak het volgende Java-programma aan met een editor naar keuze in, zeg, C:\> JAVA.

Java8Tester.java

Live Demo
import java.time.LocalDate;
import java.time.temporal.TemporalAdjusters;
import java.time.DayOfWeek;

public class Java8Tester {
    public static void main(String args[]) {
        Java8Tester java8tester = new Java8Tester();
        java8tester.testAdjusters();
    }
    
    public void testAdjusters() {
        // Haal de huidige datum op
        LocalDate date1 = LocalDate.now();
        System.out.println("Huidige datum: " + date1);
        
        // Haal de volgende dinsdag op
        LocalDate nextTuesday = date1.with(TemporalAdjusters.next(DayOfWeek.TUESDAY));
        System.out.println("Volgende dinsdag op: " + nextTuesday);
        
        // Haal de tweede zaterdag van de volgende maand op
        LocalDate firstInYear = LocalDate.of(date1.getYear(), date1.getMonth(), 1);
        LocalDate secondSaturday = firstInYear.with(TemporalAdjusters.nextOrSame(DayOfWeek.SATURDAY))
                                              .with(TemporalAdjusters.next(DayOfWeek.SATURDAY));
        System.out.println("Tweede zaterdag op: " + secondSaturday);
    }
}

Resultaat Verifiëren

Compileer de klasse met de javac compiler als volgt:

C:\JAVA>javac Java8Tester.java

Voer nu de Java8Tester uit als volgt:

C:\JAVA>java Java8Tester

Het zou het volgende resultaat moeten produceren:

Huidige datum: 2014-12-10
Volgende dinsdag op: 2014-12-16
Tweede zaterdag op: 2014-12-13

Backward Compatibiliteit

Een toInstant()-methode is toegevoegd aan de oorspronkelijke Date- en Calendar-objecten, die gebruikt kan worden om ze te converteren naar de nieuwe Date-Time API. Gebruik een ofInstant(Instant, ZoneId)-methode om een LocalDateTime- of ZonedDateTime-object te krijgen. Laten we ze in actie zien.

Maak het volgende Java-programma aan met een editor naar keuze in, zeg, C:\> JAVA.

Java8Tester.java

Live Demo
import java.time.LocalDateTime;
import java.time.ZonedDateTime;
import java.util.Date;
import java.time.Instant;
import java.time.ZoneId;

public class Java8Tester {
    public static void main(String args[]) {
        Java8Tester java8tester = new Java8Tester();
        java8tester.testBackwardCompatability();
    }
    
    public void testBackwardCompatability() {
        // Haal de huidige datum op
        Date currentDate = new Date();
        System.out.println("Huidige datum: " + currentDate);
        
        // Haal het instant van de huidige datum op in milliseconden
        Instant now = currentDate.toInstant();
        ZoneId currentZone = ZoneId.systemDefault();
        
        LocalDateTime localDateTime = LocalDateTime.ofInstant(now, currentZone);
        System.out.println("Lokale datum: " + localDateTime);
        
        ZonedDateTime zonedDateTime = ZonedDateTime.ofInstant(now, currentZone);
        System.out.println("Zoned datum: " + zonedDateTime);
    }
}

Resultaat Verifiëren

Compileer de klasse met de javac compiler als volgt:

C:\JAVA>javac Java8Tester.java

Voer nu de Java8Tester uit als volgt:

C:\JAVA>java Java8Tester

Het zou de volgende output moeten produceren:

Huidige datum: Wed Dec 10 05:44:06 UTC 2014
Lokale datum: 2014-12-10T05:44:06.635
Zoned datum: 2014-12-10T05:44:06.635Z[Etc/UTC]

Java

  1. Uitgebreide Gids voor Datum en Tijd in C++
  2. Huidige datum en tijd ophalen in Python: een praktische gids
  3. Java-operators beheersen: typen, syntax en praktische voorbeelden
  4. Java-commentaar: typen, gebruik en best practices
  5. Java interfaces meesteren: concepten, implementatie en best practices
  6. Java Try-with-resources meesteren: automatische resource management uitgelegd
  7. Java Annotaties uitgelegd: typen, plaatsing en praktische voorbeelden
  8. Java Datum en Tijd Onder de Knie: Constructors, Methods & Best Practices
  9. Java 10 introduceert Time-Based Release Versioning voor voorspelbare halfjaarlijkse updates
  10. Java 10: 70+ nieuwe API's & features uitgelegd
  11. Java 9 (JDK 9) – Belangrijkste kenmerken & voordelen