التعامل مع المناطق الزمنية
جزء من قسم المنطق وتدفق التنفيذ في رحلة 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. أضف الإزاحة باستخدام النمط xxx: فهو يطبع +09:00 أو -04:00، ويطبع الإزاحة الصفرية كـ +00:00 (بينما يطبع XXX بحروف كبيرة Z للإزاحة الصفرية بدلًا من ذلك):
// بدون إزاحة
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التحدي
سهلأنشئ دالة باسم convertTime تأخذ أربع وسيطات:
- سلسلة نصية (
dateTimeStr) بالتنسيق "yyyy-MM-dd HH:mm" - سلسلة نصية (
sourceZone) لمعرّف المنطقة الزمنية المصدر - سلسلة نصية (
targetZone) لمعرّف المنطقة الزمنية الهدف - قيمة منطقية (
showOffset) تحدد ما إذا كان يجب تضمين إزاحة المنطقة الزمنية في الناتج
يجب أن تقوم الدالة بما يلي:
- تحليل التاريخ والوقت المُدخلين في المنطقة الزمنية المصدر
- تحويلهما إلى المنطقة الزمنية الهدف
- إرجاع معلومات منسقة حول كلا الوقتين
يجب أن تكون الرسائل المُرجعة كما يلي:
- إذا كان التاريخ والوقت غير صالحين: أرجع "Invalid datetime format"
- إذا كانت المنطقة غير صالحة: أرجع "Invalid time zone"
- إذا كانت قيمة
showOffsetهي true: قم بتضمين الإزاحة في الناتج، مع تنسيقها باستخدام النمطxxx، بحيث تتم طباعة الإزاحة الصفرية كـ+00:00 - التنسيق: "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));
}
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المنطق وتدفق التنفيذ
1المصفوفات متعددة الأبعاد
أساسيات المصفوفات ثنائية الأبعادالوصول إلى عناصر المصفوفات ثنائية الأبعادالحلقات المتداخلة مع المصفوفات ثنائية الأبعادمراجعة - المصفوفات ثنائية الأبعادجمع وطرح المصفوفاتالمصفوفات المتعرجة (Jagged Arrays)المصفوفات ثلاثية الأبعاد وما بعدهاأنماط المصفوفات ثنائية الأبعاد الشائعةمراجعة - كل شيء عن المصفوفات4HashSet الجزء الأول
ما هو الـ HashSet؟إضافة عنصرحذف عنصرالتحقق من وجود عنصرالفراغ والحجمالمسح والنسخملخص - HashSet10التاريخ والوقت
أساسيات LocalDateعمليات LocalTimeاستخدام LocalDateTimePeriod و Durationتنسيق التاريخالتعامل مع المناطق الزمنية2HashMap الجزء الأول
ما هو الـ HashMap؟تعريف الـ HashMapالوصول إلى القيمالتحقق من وجود المفتاحتعديل القواميسملخص - HashMap3HashMap الجزء الثاني
دوال HashMapالتكرار باستخدام keySet()التكرار باستخدام entrySet()HashMap متداخلمراجعة - إدارة المستودعمراجعة - عمليات HashMap6التحكم المتقدم في تدفق البرنامج
العبارات المعنونةتعبير Switchمطابقة الأنماطجمل الحمايةمراجعة - تدفق التحكمتدرّب بنفسك: مترجم Java عبر الإنترنت