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"));

يمكنك أيضاً تحويل LocalDateTime إلى ZonedDateTime باستخدام .atZone():

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

يقوم .atZone() بربط منطقة زمنية بتاريخ ووقت محلي موجود، مما ينتج عنه ZonedDateTime.

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

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

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

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

لتنسيق ZonedDateTime، استخدم DateTimeFormatter. حرف النمط Z أو xxx ينسق إزاحة UTC (على سبيل المثال +09:00)، و VV ينسق معرف المنطقة (على سبيل المثال Asia/Tokyo):

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm xxx");
String formatted = tokyo.format(formatter);
// مثال: 2024-03-15 10:30 +09:00
challenge icon

التحدي

سهل

أنشئ طريقة تسمى 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]"

ورقة مرجعية

يمثل ZonedDateTime تاريخاً ووقتاً مع منطقة زمنية، وهو مفيد للعمل مع مناطق زمنية مختلفة.

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

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

تحويل LocalDateTime إلى ZonedDateTime باستخدام .atZone():

LocalDateTime local = LocalDateTime.now();
ZonedDateTime zoned = local.atZone(ZoneId.of("Asia/Tokyo"));

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

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

تنسيق ZonedDateTime بما في ذلك إزاحة UTC باستخدام أنماط Z أو xxx:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm xxx");
String formatted = zoned.format(formatter);
// مثال: 2024-03-15 10:30 +09:00

جرّب بنفسك

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