التعامل مع المناطق الزمنية
جزء من قسم 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مطابقة الأنماطجمل الحمايةمراجعة - تدفق التحكمتدرّب بنفسك: مترجم Java عبر الإنترنت