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 که زمان سپریشده را نشان میدهد، بهعلاوه پشتیبانی از مکانها/مناطق زمانی، تایمرها و سایر قابلیتهای مرتبط که در مفهوم دیگری بررسی میشوند.
در این تمرین روی یک زمانبند نوبت برای یک سالن زیبایی کار میکنید که در ۱۵ سپتامبر ۲۰۱۲ افتتاح شد.
پنج کار پیش رو دارید که همهشان به تاریخهای نوبت مربوط میشوند.
تابع Schedule را پیادهسازی کنید تا نمایش متنی یک تاریخ نوبت را به قالب متناظر time.Time تجزیه کند:
Schedule("7/25/2019 13:45:00")
// => 2019-07-25 13:45:00 +0000 UTC
تابع HasPassed را پیادهسازی کنید که یک تاریخ نوبت میگیرد و بررسی میکند که آیا نوبت جایی در گذشته بوده است:
HasPassed("July 25, 2019 13:45:00")
// => true
تابع IsAfternoonAppointment را پیادهسازی کنید که یک تاریخ نوبت میگیرد و بررسی میکند که آیا نوبت در بعدازظهر است (یعنی ساعت ۱۲:۰۰ یا بعد از آن و پیش از ۱۸:۰۰):
IsAfternoonAppointment("Thursday, July 25, 2019 13:45:00")
// => true
تابع Description را پیادهسازی کنید که یک تاریخ نوبت میگیرد و توصیفی از آن تاریخ و زمان را برمیگرداند:
Description("7/25/2019 13:45:00")
// => "You have an appointment on Thursday, July 25, 2019, at 13:45."
تابع AnniversaryDate را پیادهسازی کنید که تاریخ سالگرد افتتاح سالن را برای سال جاری به وقت UTC برمیگرداند.
با فرض اینکه سال جاری ۲۰۲۰ است:
AnniversaryDate()
// => 2020-09-15 00:00:00 +0000 UTC
توجه: مقدار بازگشتی یک time.Time است و ساعت روز اهمیتی ندارد.