Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

التعامل مع المناطق الزمنية

جزء من قسم Logic & Flow في رحلة Java على Coddy — الدرس 59 من 59.

ZonedDateTime في Java يمثل تاريخاً ووقتاً مع منطقة زمنية. إنه مفيد عند العمل مع مناطق زمنية مختلفة أو التحويل بينها.

إنشاء وقت في منطقة زمنية محددة:

ZonedDateTime tokyo = ZonedDateTime.now(ZoneId.of("Asia/Tokyo"));

يمكنك أيضاً إنشاء ZonedDateTime من LocalDateTime باستخدام .atZone():

LocalDateTime localDT = LocalDateTime.of(2024, 3, 15, 10, 30);
ZonedDateTime tokyo = localDT.atZone(ZoneId.of("Asia/Tokyo"));

تحويل الوقت بين المناطق الزمنية:

ZonedDateTime newYork = tokyo.withZoneSameInstant(ZoneId.of("America/New_York"));

بعد تنفيذ الكود أعلاه، يحتوي newYork على نفس اللحظة الزمنية مثل tokyo ولكن في المنطقة الزمنية لنيويورك:

2024-03-15T10:30-04:00[America/New_York]
// مثال على المخرجات

لتنسيق ZonedDateTime، استخدم DateTimeFormatter. يمكنك تضمين إزاحة المنطقة الزمنية في المخرجات باستخدام حرف النمط Z أو XXX:

// بدون إزاحة
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");

// مع إزاحة (على سبيل المثال +09:00 أو -04:00)
DateTimeFormatter fmtWithOffset = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm XXX");

String result = newYork.format(fmtWithOffset);
// مثال: 2024-03-15 10:30 -04:00
challenge icon

التحدي

سهل

قم بإنشاء طريقة (method) تسمى convertTime تأخذ أربعة وسائط:

  1. سلسلة نصية (dateTimeStr) بتنسيق "yyyy-MM-dd HH:mm"
  2. سلسلة نصية (sourceZone) لمعرف المنطقة الزمنية المصدر
  3. سلسلة نصية (targetZone) لمعرف المنطقة الزمنية الهدف
  4. قيمة منطقية (showOffset) تحدد ما إذا كان سيتم تضمين إزاحة المنطقة الزمنية في المخرجات

يجب أن تقوم الطريقة بما يلي:

  1. تحليل تاريخ ووقت الإدخال في المنطقة الزمنية المصدر
  2. تحويله إلى المنطقة الزمنية الهدف
  3. إرجاع معلومات منسقة حول كلا الوقتين

يجب أن تكون رسائل الإرجاع كالتالي:

  • إذا كان تنسيق التاريخ والوقت غير صالح: أرجع "Invalid datetime format"
  • إذا كانت المنطقة الزمنية غير صالحة: أرجع "Invalid time zone"
  • إذا كانت قيمة showOffset هي true: قم بتضمين الإزاحة في المخرجات
  • التنسيق: "Source: [time1], Target: [time2]"

جرّب بنفسك

import java.util.Scanner;
import java.time.*;
import java.time.format.*;

public class Main {
    public static String convertTime(String dateTimeStr, String sourceZone, 
                                   String targetZone, boolean showOffset) {
        // اكتب الكود الخاص بك هنا
    }
    
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String dateTimeStr = scanner.nextLine();
        String sourceZone = scanner.nextLine();
        String targetZone = scanner.nextLine();
        boolean showOffset = Boolean.parseBoolean(scanner.nextLine());
        
        System.out.println(convertTime(dateTimeStr, sourceZone, targetZone, showOffset));
    }
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس Logic & Flow