المسارات
/
Java
Java
/
التمارين
/
احجز موعدك للتجميل
احجز موعدك للتجميل

احجز موعدك للتجميل

تمرين تعلّمي

مقدمة

التاريخ والوقت

تحتوي حزمة java.time التي أُدخلت في Java 8 على عدة أصناف للتعامل مع التواريخ والوقت.

LocalDate

يمثّل الصنف java.time.LocalDate تاريخًا بدون منطقة زمنية في نظام التقويم ISO-8601، مثل 2007-12-03:

LocalDate date = LocalDate.of(2007, 12, 3);

يمكن مقارنة التواريخ بتواريخ أخرى:

LocalDate date1 = LocalDate.of(2007, 12, 3);
LocalDate date2 = LocalDate.of(2007, 12, 4);

date1.isBefore(date2);
// => true

date1.isAfter(date2);
// => false

تمتلك نسخة LocalDate دوال وصول لاسترجاع أجزاء الوقت منها:

LocalDate date = LocalDate.of(2007, 12, 3);

date.getDayOfMonth();
// => 3

تمتلك نسخة LocalDate طُرقًا لإضافة وحدات زمنية إليها:

Note

تُرجع هذه الطرق نسخة جديدة من LocalDate ولا تُحدّث النسخة الموجودة، لأن الصنف LocalDate غير قابل للتغيير.

LocalDate date = LocalDate.of(2007, 12, 3);

date.plusDays(3);
// => 2007-12-06

LocalDateTime

يمثّل الصنف java.time.LocalDateTime تاريخًا ووقتًا بدون منطقة زمنية في نظام التقويم ISO-8601، مثل 2007-12-03T10:15:30:

LocalDateTime datetime = LocalDateTime.of(2007, 12, 3, 10, 15, 30);

يمكنك تحويل نسخة LocalDate إلى LocalDateTime:

LocalDate date = LocalDate.of(2007, 12, 3);
LocalDateTime datetime = date.atTime(10, 15, 30);
datetime.toString();
// => "2007-12-03T10:15:30"

تنسيق التواريخ والأوقات

يستخدم كل من LocalDate وLocalDateTime الترميز القياسي ISO-8601 عند التحويل من String وإليه.

LocalDateTime datetime = LocalDateTime.of(2007, 12, 3, 10, 15, 30);
LocalDateTime parsed = LocalDateTime.parse("2007-12-03T10:15:30");

datetime.isEqual(parsed);
// => true

لا يمكن محاولة تحليل LocalDate أو LocalDateTime من String بهذه الطريقة باستخدام تنسيق مختلف. بدلًا من ذلك، لتنسيق التواريخ باستخدام تنسيق مخصّص، ينبغي عليك استخدام java.time.format.DateTimeFormatter:

DateTimeFormatter parser = DateTimeFormatter.ofPattern("dd/MM/yyyy");
LocalDate date = LocalDate.parse("03/12/2007", parser);

DateTimeFormatter printer = DateTimeFormatter.ofPattern("MMMM d, yyyy");
printer.format(date);
// => "December 3, 2007"

يمكنك أيضًا تحديد الإعدادات المحلية عند إنشاء التنسيق المخصّص للتنسيق والتحليل لمناطق مختلفة:

DateTimeFormatter.ofPattern("MMMM d, yyyy", Locale.FRENCH).format(date);
// => décembre 3, 2007

DateTimeFormatter.ofPattern("MMMM d, yyyy", Locale.of("pt")).format(date);
// => dezembro 3, 2007

التعليمات

في هذا التمرين ستعمل على مُجدوِل مواعيد لصالون تجميل في نيويورك افتُتح في 15 سبتمبر 2012.

1. تحليل تاريخ الموعد

نفّذ طريقة AppointmentScheduler.schedule() لتحليل تمثيل نصي لتاريخ موعد وتحويله إلى كائن LocalDateTime المقابل:

AppointmentScheduler scheduler = new AppointmentScheduler();
scheduler.schedule("7/25/2019 13:45:00");
// => LocalDateTime.of(2019, 7, 25, 13, 45, 0)

2. تحقق مما إذا كان الموعد قد مضى

نفّذ طريقة AppointmentScheduler.hasPassed() التي تأخذ تاريخ موعد وتتحقق مما إذا كان الموعد قد وقع في وقت ما في الماضي:

AppointmentScheduler scheduler = new AppointmentScheduler();
scheduler.hasPassed(LocalDateTime.of(1999, 12, 31, 9, 0, 0));
// => true

3. تحقق مما إذا كان الموعد في فترة ما بعد الظهر

نفّذ طريقة AppointmentScheduler.isAfternoonAppointment() التي تأخذ تاريخ موعد وتتحقق مما إذا كان الموعد في فترة ما بعد الظهر (>= 12:00 و < 18:00):

AppointmentScheduler scheduler = new AppointmentScheduler();
scheduler.isAfternoonAppointment(LocalDateTime.of(2019, 03, 29, 15, 0, 0))
// => true

4. صف وقت الموعد وتاريخه

نفّذ طريقة AppointmentScheduler.getDescription() التي تأخذ تاريخ موعد وتُرجع وصفًا لذلك التاريخ والوقت:

AppointmentScheduler scheduler = new AppointmentScheduler();
scheduler.getDescription(LocalDateTime.of(2019, 03, 29, 15, 0, 0))
// => "You have an appointment on Friday, March 29, 2019, at 3:00 PM."

5. أرجع تاريخ الذكرى السنوية

نفّذ طريقة AppointmentScheduler.getAnniversaryDate() التي تُرجع تاريخ الذكرى السنوية لهذا العام، وهو 15 سبتمبر:

AppointmentScheduler scheduler = new AppointmentScheduler();
scheduler.getAnniversaryDate()
// => LocalDate.of(<current year>, 9, 15)
تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
Java Exercism

مستعد لبدء احجز موعدك للتجميل؟

سجّل في Exercism لتتعلّم وتتقن Java عبر 26 مفهومًا158 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.