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 - Nieuwe datum/tijd-API

Met Java 8 wordt een nieuwe Date-Time API geïntroduceerd om de volgende nadelen van de oude Date-Time API te dekken.

  • Niet threadveilig − java.util.Date is niet thread-safe, dus ontwikkelaars hebben te maken met gelijktijdigheidsproblemen tijdens het gebruik van date. De nieuwe datum-tijd-API is onveranderlijk en heeft geen setter-methoden.

  • Slecht ontwerp − Standaarddatum begint bij 1900, maand begint bij 1 en dag begint bij 0, dus geen uniformiteit. De oude API had minder directe methoden voor datumbewerkingen. De nieuwe API biedt tal van hulpprogramma's voor dergelijke bewerkingen.

  • Moeilijke afhandeling van tijdzones − Ontwikkelaars moesten veel code schrijven om tijdzoneproblemen op te lossen. De nieuwe API is ontwikkeld met het oog op een domeinspecifiek ontwerp.

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.

  • Lokaal − Vereenvoudigde datum-tijd-API zonder complexiteit van tijdzoneverwerking.

  • Gezoneerd − Gespecialiseerde datum-tijd-API om met verschillende tijdzones om te gaan.

Lokale datum-tijd-API

De klassen LocalDate/LocalTime en LocalDateTime vereenvoudigen de ontwikkeling waar tijdzones niet vereist zijn. Laten we ze in actie zien.

Maak het volgende java-programma met een editor naar keuze, bijvoorbeeld 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() {
      // Get the current date and time
      LocalDateTime currentTime = LocalDateTime.now();
      System.out.println("Current 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("Month: " + month +"day: " + day +"seconds: " + 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 hour 15 minutes
      LocalTime date4 = LocalTime.of(22, 15);
      System.out.println("date4: " + date4);
		
      //parse a string
      LocalTime date5 = LocalTime.parse("20:15:30");
      System.out.println("date5: " + date5);
   }
}

Verifieer het resultaat

Stel de klas samen met javac compiler als volgt −

C:\JAVA>javac Java8Tester.java

Voer nu de Java8Tester als volgt uit −

C:\JAVA>java Java8Tester

Het zou de volgende output moeten produceren −

Current DateTime: 2014-12-09T11:00:45.457
date1: 2014-12-09
Month: DECEMBERday: 9seconds: 45
date2: 2012-12-10T11:00:45.457
date3: 2014-12-12
date4: 22:15
date5: 20:15:30

Gezoneerde datum-tijd-API

Gezoneerde datum-tijd-API moet worden gebruikt wanneer rekening moet worden gehouden met de tijdzone. Laten we ze in actie zien.

Maak het volgende Java-programma met een editor naar keuze, bijvoorbeeld 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() {
      // Get the current date and time
      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);
   }
}

Verifieer het resultaat

Stel de klas samen met javac compiler als volgt −

C:\JAVA>javac Java8Tester.java

Voer nu de Java8Tester als volgt uit −

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 toegevoegd in Java 8 om de gehele waarden te vervangen die in de oude API werden gebruikt om dag, maand, enz. weer te geven. Laten we ze eens in actie zien.

Maak het volgende Java-programma met een editor naar keuze, bijvoorbeeld 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() {
      //Get the current date
      LocalDate today = LocalDate.now();
      System.out.println("Current date: " + today);
		
      //add 1 week to the current date
      LocalDate nextWeek = today.plus(1, ChronoUnit.WEEKS);
      System.out.println("Next week: " + nextWeek);
		
      //add 1 month to the current date
      LocalDate nextMonth = today.plus(1, ChronoUnit.MONTHS);
      System.out.println("Next month: " + nextMonth);
		
      //add 1 year to the current date
      LocalDate nextYear = today.plus(1, ChronoUnit.YEARS);
      System.out.println("Next year: " + nextYear);
		
      //add 10 years to the current date
      LocalDate nextDecade = today.plus(1, ChronoUnit.DECADES);
      System.out.println("Date after ten year: " + nextDecade);
   }
}

Verifieer het resultaat

Stel de klas samen met javac compiler als volgt −

C:\JAVA>javac Java8Tester.java

Voer nu de Java8Tester als volgt uit −

C:\JAVA>java Java8Tester

Het zou het volgende resultaat moeten opleveren −

Current date: 2014-12-10
Next week: 2014-12-17
Next month: 2015-01-10
Next year: 2015-12-10
Date after ten year: 2024-12-10

Periode en duur

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

  • Periode − Het gaat over op datum gebaseerde hoeveelheid tijd.

  • Duur − Het gaat over op tijd gebaseerde hoeveelheid tijd.

Laten we ze in actie zien.

Maak het volgende Java-programma met een editor naar keuze, bijvoorbeeld 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() {
      //Get the current date
      LocalDate date1 = LocalDate.now();
      System.out.println("Current date: " + date1);
		
      //add 1 month to the current date
      LocalDate date2 = date1.plus(1, ChronoUnit.MONTHS);
      System.out.println("Next month: " + 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);
   }
}

Verifieer het resultaat

Stel de klas samen met javac compiler als volgt −

C:\JAVA>javac Java8Tester.java

Voer nu de Java8Tester als volgt uit −

C:\JAVA>java Java8Tester

Het zou de volgende output moeten produceren −

Current date: 2014-12-10
Next month: 2015-01-10
Period: P-1M
Duration: PT2H

Tijdelijke Richters

TemporalAdjuster wordt gebruikt om de datumwiskunde uit te voeren. Ontvang bijvoorbeeld de "Tweede zaterdag van de maand" of "Volgende dinsdag". Laten we ze in actie zien.

Maak het volgende Java-programma met een editor naar keuze, bijvoorbeeld 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() {
      //Get the current date
      LocalDate date1 = LocalDate.now();
      System.out.println("Current date: " + date1);
		
      //get the next tuesday
      LocalDate nextTuesday = date1.with(TemporalAdjusters.next(DayOfWeek.TUESDAY));
      System.out.println("Next Tuesday on : " + nextTuesday);
		
      //get the second saturday of next month
      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("Second Saturday on : " + secondSaturday);
   }
}

Verifieer het resultaat

Stel de klas samen met javac compiler als volgt −

C:\JAVA>javac Java8Tester.java

Voer nu de Java8Tester als volgt uit −

C:\JAVA>java Java8Tester

Het zou het volgende resultaat moeten opleveren −

Current date: 2014-12-10
Next Tuesday on : 2014-12-16
Second Saturday on : 2014-12-13

Achterwaartse compatibiliteit

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

Maak het volgende Java-programma met een editor naar keuze, bijvoorbeeld 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() {
      //Get the current date
      Date currentDate = new Date();
      System.out.println("Current date: " + currentDate);
		
      //Get the instant of current date in terms of milliseconds
      Instant now = currentDate.toInstant();
      ZoneId currentZone = ZoneId.systemDefault();
		
      LocalDateTime localDateTime = LocalDateTime.ofInstant(now, currentZone);
      System.out.println("Local date: " + localDateTime);
		
      ZonedDateTime zonedDateTime = ZonedDateTime.ofInstant(now, currentZone);
      System.out.println("Zoned date: " + zonedDateTime);
   }
}

Verifieer het resultaat

Stel de klas samen met javac compiler als volgt −

C:\JAVA>javac Java8Tester.java

Voer nu de Java8Tester als volgt uit −

C:\JAVA>java Java8Tester

Het zou de volgende output moeten produceren −

Current date: Wed Dec 10 05:44:06 UTC 2014
Local date: 2014-12-10T05:44:06.635
Zoned date: 2014-12-10T05:44:06.635Z[Etc/UTC]

Java

  1. Hoe de huidige datum en tijd in Python te krijgen?
  2. Java-operators
  3. Java-opmerkingen
  4. Java-interface
  5. Java proberen-met-bronnen
  6. Java-annotaties
  7. Java - Datum en tijd
  8. C++ Datum en tijd
  9. Java 10 - Versiebeheer op basis van tijd
  10. Java 10 - Nieuwe API's en opties
  11. Java 9 - Overzicht