التعامل مع المناطق الزمنية
جزء من قسم 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التحدي
سهلأنشئ طريقة تسمى convertTime تأخذ أربعة وسائط:
- سلسلة نصية (
dateTimeStr) بتنسيق "yyyy-MM-dd HH:mm" - سلسلة نصية (
sourceZone) تمثل معرف المنطقة الزمنية للمصدر - سلسلة نصية (
targetZone) تمثل معرف المنطقة الزمنية للهدف - قيمة منطقية (
showOffset) تحدد ما إذا كان سيتم تضمين إزاحة المنطقة الزمنية في المخرجات
يجب أن تقوم الطريقة بـ:
- تحليل تاريخ ووقت الإدخال في المنطقة الزمنية للمصدر
- تحويله إلى المنطقة الزمنية للهدف
- إرجاع معلومات منسقة حول كلا الوقتين
يجب أن تكون رسائل الإرجاع:
- إذا كان التاريخ والوقت غير صالحين: أرجع "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));
}
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Logic & Flow
1المصفوفات متعددة الأبعاد
أساسيات المصفوفات ثنائية الأبعادالوصول إلى عناصر المصفوفات ثنائية الأبعادالحلقات المتداخلة مع المصفوفات ثنائية الأبعادمراجعة - المصفوفات ثنائية الأبعادجمع وطرح المصفوفاتالمصفوفات المتعرجة (Jagged Arrays)المصفوفات ثلاثية الأبعاد وما بعدهاأنماط المصفوفات ثنائية الأبعاد الشائعةمراجعة - كل شيء عن المصفوفات4HashSet الجزء الأول
ما هو الـ HashSet؟إضافة عنصرحذف عنصرالتحقق من وجود عنصرالفراغ والحجمالمسح والنسخملخص - HashSet10التاريخ والوقت
أساسيات LocalDateعمليات LocalTimeاستخدام LocalDateTimePeriod و Durationتنسيق التاريخالتعامل مع المناطق الزمنية2HashMap الجزء الأول
ما هو الـ HashMap؟تعريف الـ HashMapالوصول إلى القيمالتحقق من وجود المفتاحتعديل القواميسملخص - HashMap3HashMap الجزء الثاني
دوال HashMapالتكرار باستخدام keySet()التكرار باستخدام entrySet()HashMap متداخلمراجعة - إدارة المستودعمراجعة - عمليات HashMap6التحكم المتقدم في تدفق البرنامج
العبارات المعنونةتعبير Switchمطابقة الأنماطجمل الحمايةمراجعة - تدفق التحكم