time paketi
time — vaqt va sana bilan ishlash: hozirgi vaqtni olish, uni formatlash, ikkita vaqt orasidagi farqni hisoblash, dasturni ma'lum vaqtga to'xtatib turish kabi vazifalar uchun mo'ljallangan standart paket.
import "time"
time.Now()package main
import (
"fmt"
"time"
)
func main() {
now := time.Now()
fmt.Println(now.Year()) // yil
fmt.Println(now.Month()) // oy (nomi bilan, masalan September)
fmt.Println(now.Day()) // kun
fmt.Println(now.Hour()) // soat
fmt.Println(now.Weekday()) // hafta kuni (masalan Friday)
}
Natija (siz ishga tushirgan vaqtga qarab boshqacha chiqadi):
2026
September
25
0
Friday
time.Now() — time.Time turidagi qiymat qaytaradi. Bu tur o'zida yil, oy, kun, soat va hokazolarni saqlaydi, va yuqoridagidek metodlar orqali ularga alohida-alohida murojaat qilish mumkin.
Format()Goda vaqtni formatlash boshqa tillardagidan biroz farq qiladi — format belgilari (%d, %Y kabi) o'rniga aynan shu sanadan foydalaniladi: 2006-01-02 15:04:05 (mos ravishda: yil-oy-kun soat:daqiqa:soniya). Bu Goning "mos yozuv sanasi" (reference/layout time) deb ataladi.
package main
import (
"fmt"
"time"
)
func main() {
now := time.Now()
fmt.Println(now.Format("2006-01-02 15:04:05"))
fmt.Println(now.Format("02.01.2006")) // faqat kun.oy.yil
}
Natija:
2026-09-25 00:22:48
25.09.2026
[!IMPORTANT] Goda vaqtni formatlash uchun
2006-01-02 15:04:05— bu shunchaki YODDA QOLADIGAN maxsus sana:1(oy),2(kun),3yoki15(soat),4(daqiqa),5(soniya),6(yil oxirgi 2 raqami) yoki2006(yil to'liq),Mon/Monday(hafta kuni). Boshqa har qanday sanani "namuna" sifatida yozsangiz — Go uni tushunmaydi! Faqat aynan shu maxsus sanadagi raqamlar ishlaydi.
time.Parse()Format()ning teskarisi — satr ko'rinishidagi sanani time.Time turiga aylantirish:
package main
import (
"fmt"
"time"
)
func main() {
// birinchi parametr — qanday formatda ekanligini bildiruvchi "namuna"
t, err := time.Parse("2006-01-02", "2025-09-24")
fmt.Println(t)
fmt.Println(err)
}
Natija:
2025-09-24 00:00:00 +0000 UTC
<nil>
time.Durationtime.Duration — ikkita vaqt orasidagi farqni yoki kutish davomiyligini ifodalaydi (masalan, "2 soat" yoki "500 millisekund"):
package main
import (
"fmt"
"time"
)
func main() {
d := 2 * time.Hour
fmt.Println(d)
d2 := 90 * time.Minute
fmt.Println(d2)
fmt.Println(d2.Hours()) // Duration'ni soatlarga aylantirib olish
}
Natija:
2h0m0s
1h30m0s
1.5
time.Hour, time.Minute, time.Second, time.Millisecond — bularning barchasi tayyor konstantalar bo'lib, ularni songa ko'paytirish orqali istalgan davomiylikni yasash mumkin.
time.Sleep()package main
import (
"fmt"
"time"
)
func main() {
fmt.Println("Boshlandi...")
time.Sleep(2 * time.Second) // 2 soniya kutadi
fmt.Println("2 soniyadan keyin davom etdi")
}
Natija (2 soniyalik tanaffusdan keyin):
Boshlandi...
2 soniyadan keyin davom etdi
time.Since()Biror amal qancha vaqt olganini o'lchash uchun eng ko'p ishlatiladigan usul:
package main
import (
"fmt"
"time"
)
func main() {
start := time.Now()
time.Sleep(10 * time.Millisecond) // masalan, uzoq davom etadigan biror amal
elapsed := time.Since(start) // start dan hozirgacha o'tgan vaqt
fmt.Println("Amal davomiyligi:", elapsed)
}
Natija (aniq son har safar biroz farq qiladi):
Amal davomiyligi: 11.2375ms
[!NOTE]
time.Since(start)aslidatime.Now().Sub(start)ning qisqartmasi, xolos — lekin ancha ko'p ishlatilgani uchun alohida qulay funksiya sifatida taqdim etilgan.
Add(), Sub(), After(), Before()package main
import (
"fmt"
"time"
)
func main() {
now := time.Now()
// 24 soat qo'shamiz (ertangi shu vaqt)
tomorrow := now.Add(24 * time.Hour)
fmt.Println(tomorrow.Day() - now.Day())
t1 := time.Date(2025, time.September, 24, 10, 0, 0, 0, time.UTC)
t2 := time.Date(2025, time.September, 25, 10, 0, 0, 0, time.UTC)
fmt.Println(t2.After(t1)) // t2, t1'dan keyinmi?
fmt.Println(t1.Before(t2)) // t1, t2'dan oldinmi?
fmt.Println(t2.Sub(t1)) // t2 va t1 orasidagi farq (Duration)
}
Natija:
1
true
true
24h0m0s
time.Date() orqali aniq bir sana-vaqtni qo'lda yasash mumkin: parametrlar ketma-ketligi — yil, oy, kun, soat, daqiqa, soniya, nanosoniya va vaqt zonasi (time.UTC).
| Vazifa | Funksiya |
|---|---|
| Hozirgi vaqtni olish | time.Now() |
| Vaqtni matn ko'rinishida chiqarish | t.Format("2006-01-02 15:04:05") |
| Matnni vaqtga aylantirish | time.Parse(layout, satr) |
| Ma'lum davomiylik (2 soat, 500ms) yasash | time.Duration (2 * time.Hour) |
| Dasturni kutdirish | time.Sleep(davomiylik) |
| O'tgan vaqtni o'lchash | time.Since(start) |
| Vaqtga qo'shish/ayirish, solishtirish | Add(), Sub(), After(), Before() |
[!IMPORTANT] Amaliyotda ko'p uchraydigan xato:
2006-01-02o'rniga tasodifiy boshqa sanani (masalan, o'zingiz ishga tushirgan kunni) format sifatida yozib qo'yish. Buni chalkashtirmaslik uchun doim aynan2006-01-02 15:04:05sanasidan foydalanishni yodda tuting — bu Go dunyosida "mos yozuv sanasi" sifatida standart qabul qilingan.