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