English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

تعليمية Java الأساسية

تحكم في العملية Java

مجموعات Java Array

Java التوجه نحو الأjective (I)

Java التوجه نحو الأjective (II)

Java التوجه نحو الأ�체ة (III)

معالجة الاستثناءات Java

قائمة Java List

Java Queue (الصف)

مجموعات Java Map

مجموعات Java Set

إدخال/إخراج Java (I/O)

قراء/كتابة Java

مواضيع أخرى في Java

API لتاريخ الوقت في Java 8

ميزات Java 8 الجديدة

قام Java 8 بتقديم دعمًا إضافيًا لتعامل التاريخ والوقت من خلال نشر API الجديدة لتاريخ الوقت (JSR 310).

في إصدارات Java القديمة، كان هناك العديد من المشاكل في API لتاريخ الوقت، من بينها:

  • غير آمنة للتعامل معها بين الأطراف المختلفة − java.util.Date غير آمنة للتعامل معها بين الأطراف المختلفة، جميع كلاسيكيات التاريخ في Java قابلة للتغيير، وهي واحدة من أكبر مشاكل كلاسيكيات التاريخ في Java.

  • Design is very bad − The definitions of Java's date/time classes are inconsistent. There are date classes in both the java.util and java.sql packages, and the classes used for formatting and parsing are defined in the java.text package. java.util.Date contains both date and time, while java.sql.Date only contains date. It is not reasonable to include it in the java.sql package. Moreover, both classes have the same name, which is a very poor design.

  • Time zone handling is麻烦 − The date class does not provide internationalization and does not support time zones, so Java introduced the java.util.Calendar and java.util.TimeZone classes, but they also have all the above problems.

Java 8 in java.time The package provides many new APIs. The following are two important APIs:

  • Local(local) − Simplifies the handling of date and time without time zone issues.

  • Zoned(time zone) − Handle date and time through a specified time zone.

The new java.time package covers all operations on date, time, date/time, time zone, instants, durations, and clocks.

Localization of date and time API

LocalDate/LocalTime and LocalDateTime classes are not necessary when dealing with time zones. The code is as follows:

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 current date and time
      LocalDateTime currentTime = LocalDateTime.now();
      System.out.println("current time: " + 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 +", اليوم: " + day +", الثانية: " + seconds);
        
      LocalDateTime date2 = currentTime.withDayOfMonth(10).withYear(2012);
      System.out.println("date2: " + date2);
        
      // 12 ديسمبر 2014
      LocalDate date3 = LocalDate.of(2014, Month.DECEMBER, 12);
      System.out.println("date3: " + date3);
        
      // 22 ساعة 15 دقيقة
      LocalTime date4 = LocalTime.of(22, 15);
      System.out.println("date4: " + date4);
        
      // تحليل السلسلة
      LocalTime date5 = LocalTime.parse("20:15:30");
      System.out.println("date5: " + date5);
   {}
{}

تنفيذ السكربت المذكور أعلاه، الناتج هو:

$ javac Java8Tester.java 
$ java Java8Tester
الوقت الحالي: 2016-04-15T16:55:48.668
date1: 2016-04-15
الشهر: APRIL, اليوم: 15, الثانية: 48
date2: 2012-04-10T16:55:48.668
date3: 2014-12-12
date4: 22:15
date5: 20:15:30

استخدام API تاريخ الوقت المناطقي

إذا كان علينا النظر في الوقت المناطقي، يمكننا استخدام API تاريخ الوقت المناطقي:

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(){
    
      // الحصول على التاريخ والوقت الحالي
      ZonedDateTime date1 = ZonedDateTime.parse("2015-12-03T10:15:30+05:30[Asia/Shanghai]");
      System.out.println("date1: " + date1);
        
      ZoneId id = ZoneId.of("Europe/Paris");
      System.out.println("ZoneId: " + id);
        
      ZoneId currentZone = ZoneId.systemDefault();
      System.out.println("المنطقة الزمنية الحالية: " + currentZone);
   {}
{}

تنفيذ السكربت المذكور أعلاه، الناتج هو:

$ javac Java8Tester.java 
$ java Java8Tester
date1: 2015-12-03T10:15:30+08:00[Asia/Shanghai]
ZoneId: Europe/Paris
المنطقة الزمنية الحالية: Asia/Shanghai

ميزات Java 8 الجديدة