56 / 68

time

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.

example.go
import "time"

1. Hozirgi vaqtni olish: time.Now()

example.go
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):

kod
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.


2. Vaqtni istalgan ko'rinishda chiqarish: 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.

example.go
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:

kod
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), 3 yoki 15 (soat), 4 (daqiqa), 5 (soniya), 6 (yil oxirgi 2 raqami) yoki 2006 (yil to'liq), Mon/Monday (hafta kuni). Boshqa har qanday sanani "namuna" sifatida yozsangiz — Go uni tushunmaydi! Faqat aynan shu maxsus sanadagi raqamlar ishlaydi.


3. Satrni vaqtga aylantirish: time.Parse()

Format()ning teskarisi — satr ko'rinishidagi sanani time.Time turiga aylantirish:

example.go
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:

kod
2025-09-24 00:00:00 +0000 UTC
<nil>

4. Vaqt oralig'i: time.Duration

time.Duration — ikkita vaqt orasidagi farqni yoki kutish davomiyligini ifodalaydi (masalan, "2 soat" yoki "500 millisekund"):

example.go
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:

kod
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.


5. Dasturni to'xtatib turish: time.Sleep()

example.go
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):

kod
Boshlandi...
2 soniyadan keyin davom etdi

6. O'tgan vaqtni hisoblash: time.Since()

Biror amal qancha vaqt olganini o'lchash uchun eng ko'p ishlatiladigan usul:

example.go
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):

kod
Amal davomiyligi: 11.2375ms

[!NOTE] time.Since(start) aslida time.Now().Sub(start) ning qisqartmasi, xolos — lekin ancha ko'p ishlatilgani uchun alohida qulay funksiya sifatida taqdim etilgan.


7. Vaqtga qo'shish va ayirish: Add(), Sub(), After(), Before()

example.go
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:

kod
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).


Xulosa: qachon qaysi funksiya kerak?

VazifaFunksiya
Hozirgi vaqtni olishtime.Now()
Vaqtni matn ko'rinishida chiqarisht.Format("2006-01-02 15:04:05")
Matnni vaqtga aylantirishtime.Parse(layout, satr)
Ma'lum davomiylik (2 soat, 500ms) yasashtime.Duration (2 * time.Hour)
Dasturni kutdirishtime.Sleep(davomiylik)
O'tgan vaqtni o'lchashtime.Since(start)
Vaqtga qo'shish/ayirish, solishtirishAdd(), Sub(), After(), Before()

[!IMPORTANT] Amaliyotda ko'p uchraydigan xato: 2006-01-02 o'rniga tasodifiy boshqa sanani (masalan, o'zingiz ishga tushirgan kunni) format sifatida yozib qo'yish. Buni chalkashtirmaslik uchun doim aynan 2006-01-02 15:04:05 sanasidan foydalanishni yodda tuting — bu Go dunyosida "mos yozuv sanasi" sifatida standart qabul qilingan.