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

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

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

مقدمه

Time در Go نوعی است که یک لحظه در زمان را توصیف می‌کند. اطلاعات تاریخ و زمان را می‌توان از طریق متدهایش خواند، مقایسه کرد و دست‌کاری کرد، اما چند تابع هم هست که روی خود پکیج time فراخوانی می‌شوند. تاریخ و زمان کنونی را می‌توان با تابع time.Now به دست آورد.

تابع time.Parse رشته‌ها را به مقادیری از نوع Time تبدیل می‌کند. Go روش ویژه‌ای برای تعریف قالبی دارد که برای تجزیه انتظار دارید. باید نمونه‌ای از این قالب را با استفاده از مقادیر این مهر زمانی ویژه بنویسید: Mon Jan 2 15:04:05 -0700 MST 2006.

برای مثال:

import "time"

func parseTime() time.Time {
    date := "Tue, 09/22/1995, 13:00"
    layout := "Mon, 01/02/2006, 15:04"

    t, err := time.Parse(layout,date) // time.Time, error
}

// => 1995-09-22 13:00:00 +0000 UTC

متد Time.Format() نمایشی رشته‌ای از زمان برمی‌گرداند. درست مانند تابع Parse، قالب مقصد هم دوباره با نمونه‌ای تعریف می‌شود که از مقادیر مهر زمانی ویژه استفاده می‌کند.

برای مثال:

import (
    "fmt"
    "time"
)

func main() {
    t := time.Date(1995,time.September,22,13,0,0,0,time.UTC)
    formattedTime := t.Format("Mon, 01/02/2006, 15:04") // string
    fmt.Println(formattedTime)
}

// => Fri, 09/22/1995, 13:00

گزینه‌های قالب

برای یک قالب سفارشی، از ترکیبی از این گزینه‌ها استفاده کنید. در Go، ثابت‌های قالب از پیش تعریف‌شده‌ای هم برای تاریخ و مهر زمانی در دسترس‌اند.

زمان گزینه‌ها
سال 2006 ; 06
ماه Jan ; January ; 01 ; 1
روز 02 ; 2 ; _2 (برای صفر پیشین)
روز هفته Mon ; Monday
ساعت 15 ( قالب زمانی ۲۴ساعته ) ; 3 ; 03 (AM or PM)
دقیقه 04 ; 4
ثانیه 05 ; 5
نشانگر AM/PM PM
روز سال 002 ; __2

نوع time.Time متدهای گوناگونی برای دسترسی به بخشی خاص از زمان دارد؛ مثلاً ساعت: Time.Hour() و ماه: Time.Month(). توضیح بیشتر درباره‌ی نحوه‌ی کار آن را می‌توانید در مستندات رسمی پیدا کنید.

time نوع دیگری هم دارد به نام Duration که زمان سپری‌شده را نشان می‌دهد، به‌علاوه پشتیبانی از مکان‌ها/مناطق زمانی، تایمرها و سایر قابلیت‌های مرتبط که در مفهوم دیگری بررسی می‌شوند.

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

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

پنج کار پیش رو دارید که همه‌شان به تاریخ‌های نوبت مربوط می‌شوند.

1. تجزیه‌ی تاریخ نوبت

تابع Schedule را پیاده‌سازی کنید تا نمایش متنی یک تاریخ نوبت را به قالب متناظر time.Time تجزیه کند:

Schedule("7/25/2019 13:45:00")
// => 2019-07-25 13:45:00 +0000 UTC

2. بررسی اینکه آیا نوبت قبلاً گذشته است

تابع HasPassed را پیاده‌سازی کنید که یک تاریخ نوبت می‌گیرد و بررسی می‌کند که آیا نوبت جایی در گذشته بوده است:

HasPassed("July 25, 2019 13:45:00")
// => true

3. بررسی اینکه آیا نوبت بعدازظهر است

تابع IsAfternoonAppointment را پیاده‌سازی کنید که یک تاریخ نوبت می‌گیرد و بررسی می‌کند که آیا نوبت در بعدازظهر است (یعنی ساعت ۱۲:۰۰ یا بعد از آن و پیش از ۱۸:۰۰):

IsAfternoonAppointment("Thursday, July 25, 2019 13:45:00")
// => true

4. توصیف زمان و تاریخ نوبت

تابع Description را پیاده‌سازی کنید که یک تاریخ نوبت می‌گیرد و توصیفی از آن تاریخ و زمان را برمی‌گرداند:

Description("7/25/2019 13:45:00")
// => "You have an appointment on Thursday, July 25, 2019, at 13:45."

5. برگرداندن تاریخ سالگرد افتتاح سالن

تابع AnniversaryDate را پیاده‌سازی کنید که تاریخ سالگرد افتتاح سالن را برای سال جاری به وقت UTC برمی‌گرداند.

با فرض اینکه سال جاری ۲۰۲۰ است:

AnniversaryDate()

// => 2020-09-15 00:00:00 +0000 UTC

توجه: مقدار بازگشتی یک time.Time است و ساعت روز اهمیتی ندارد.

ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
Go Exercism

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

در Exercism ثبت‌نام کنید تا Go را همراه با 34 مفهوم165 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.