مسیرها
/
Java
Java
/
تمرین‌ها
/
نوبت‌گیری برای زیبایی
نوبت‌گیری برای زیبایی

نوبت‌گیری برای زیبایی

تمرین یادگیری

مقدمه

تاریخ و زمان

بسته‌ی java.time که در Java ۸ معرفی شد، شامل چندین کلاس برای کار با تاریخ و زمان است.

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 هنگام تبدیل از String و به آن، از نشانه‌گذاری استاندارد ISO-8601 استفاده می‌کنند.

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 را با قالب متفاوتی از رشته‌ای مانند این تجزیه کرد. در عوض، برای قالب‌بندی تاریخ‌ها با یک قالب سفارشی، باید از 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"

هنگام ساختن قالب سفارشی می‌توان یک locale را نیز مشخص کرد تا قالب‌بندی و تجزیه برای مناطق مختلف انجام شود:

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

دستورالعمل‌ها

در این تمرین روی یک برنامه‌ریز قرار ملاقات برای یک سالن زیبایی در نیویورک کار می‌کنید که در ۱۵ سپتامبر ۲۰۱۲ افتتاح شد.

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() را پیاده‌سازی کنید که یک تاریخ قرار ملاقات می‌گیرد و بررسی می‌کند آیا این قرار ملاقات در بعدازظهر است (>= ۱۲:۰۰ و < ۱۸:۰۰):

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() را پیاده‌سازی کنید که تاریخ سالگرد امسال را برمی‌گرداند؛ این تاریخ ۱۵ سپتامبر است:

AppointmentScheduler scheduler = new AppointmentScheduler();
scheduler.getAnniversaryDate()
// => LocalDate.of(<current year>, 9, 15)
ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
Java Exercism

آماده‌اید نوبت‌گیری برای زیبایی را شروع کنید؟

در Exercism ثبت‌نام کنید تا Java را همراه با 26 مفهوم158 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.