تاریخ و زمان (Date/Time)

کار با پکیج time: زمان فعلی، قالب‌بندی، Duration و محاسبات زمانی.

پکیج time

همه امکانات زمانی Go در پکیج استاندارد time است:

import "time"

زمان فعلی

now := time.Now()

fmt.Println(now)                    ← 2026-08-15 10:30:00
fmt.Println(now.Year())             ← 2026
fmt.Println(now.Month())            ← August
fmt.Println(now.Day())              ← 15
fmt.Println(now.Hour())             ← 10
fmt.Println(now.Minute())           ← 30
fmt.Println(now.Weekday())          ← Saturday

قالب‌بندی — روش جالب Go!

Go به جای YYYY-MM-DD از یک زمان مرجع استفاده می‌کند:

Mon Jan 2 15:04:05 MST 2006
     ↑  ↑ ↑  ↑  ↑  ↑     ↑
    ماه روز ساعت دقیقه ثانیه سال
now := time.Now()

fmt.Println(now.Format("2006-01-02"))         ← 2026-08-15
fmt.Println(now.Format("15:04"))              ← 10:30
fmt.Println(now.Format("2006/01/02 15:04:05")) ← 2026/08/15 10:30:00
fmt.Println(now.Format("Monday, January 2"))  ← Saturday, August 15
ترفند حفظ کردن: عددش می‌شود 1 2 3 4 5 6 — ماه ۱، روز ۲، ساعت ۳، دقیقه ۴، ثانیه ۵، سال ۶!

ساخت زمان مشخص

date := time.Date(2026, time.August, 15, 10, 30, 0, 0, time.UTC)

Duration — بازه زمانی

var d time.Duration = 5 * time.Second

fmt.Println(d)              ← 5s
fmt.Println(d.Hours())      ← 0.0013...
fmt.Println(d.Minutes())    ← 0.0833...
fmt.Println(d.Seconds())    ← 5

ثابت‌های Duration

time.Nanosecond   ← ns
time.Microsecond  ← µs
time.Millisecond  ← ms
time.Second       ← s
time.Minute       ← m
time.Hour         ← h

محاسبات زمانی

start := time.Date(2026, 1, 1, 0, 0, 0, 0, time.UTC)
end := time.Date(2026, 12, 31, 0, 0, 0, 0, time.UTC)

diff := end.Sub(start)          ← فاصله
fmt.Println(diff.Hours() / 24)  ← 364 روز

// افزودن زمان
tomorrow := time.Now().AddDate(0, 0, 1)   ← فردا
nextHour := time.Now().Add(time.Hour)     ← یک ساعت بعد

مقایسه زمان‌ها

t1 := time.Now()
t2 := t1.Add(time.Hour)

fmt.Println(t1.Before(t2))   ← true
fmt.Println(t1.After(t2))    ← false
fmt.Println(t1.Equal(t1))    ← true

Unix Timestamp

now := time.Now()
fmt.Println(now.Unix())          ← ثانیه از ۱۹۷۰
fmt.Println(now.UnixMilli())     ← میلی‌ثانیه

ts := time.Unix(1760000000, 0)  ← تبدیل به زمان
fmt.Println(ts)

این مبحث بخشی از دوره آموزش کامل گو است.

ابزارهای مرتبط