← Kembali ke kursus
Pelajaran kursus · Go
Pelajaran 35

Time, parsing, dan format waktu

Baca, format, dan ubah representasi waktu.

Pahami konsepnya

time.Now() memberi waktu saat ini; time.Date(...) membangun waktu spesifik. Nilai time.Time membawa tanggal, jam, zona, dan lokasi sekaligus — perbandingan (Before/After/Equal) serta selisih (.Sub) bekerja benar lintas zona.

Menyusun tampilannya unik di Go: alih-alih kode seperti YYYY-MM-DD, layout ditulis dengan waktu referensi Mon Jan 2 15:04:05 MST 2006 — angka-angkanya sengaja 1 (bulan), 2 (tanggal), 3 (jam), 4 (menit), 5 (detik), 2006 (tahun). t.Format("2006-01-02 15:04") menghasilkan bentuk yang kamu tulis polanya; konstanta siap pakai seperti time.RFC3339 juga tersedia.

Parsing adalah arah sebaliknya: time.Parse(layout, teks) membaca teks waktu menjadi time.Time memakai layout yang sama. Kegagalan format mengembalikan error — selalu periksa. Kombinasi Format + Parse menutup hampir semua kebutuhan: dari API, berkas log, sampai input pengguna.

Coba contoh kode

package main

import (
    "fmt"
    "time"
)

func main() {
    sekarang := time.Now()
    fmt.Println(sekarang.Format("Senin, 2 Januari 2006 15:04"))
    fmt.Println(sekarang.Format(time.RFC3339))
}

Layout "Senin, 2 Januari 2006 15:04" dipenuhi otomatis oleh nilai waktu — Go mengenali tiap elemen referensinya (Senin=Monday, 2=tanggal, Januari=month-name, 15 jam, 04 menit) dan menggantinya dengan nilai nyata. time.RFC3339 menghasilkan format standar internet "2006-01-02T15:04:05Z07:00".

Parsing teks menjadi waktu

func main() {
    teks := "2026-10-10 08:30"
    t, err := time.Parse("2006-01-02 15:04", teks)
    if err != nil {
        fmt.Println("format salah:", err)
        return
    }
    fmt.Println(t.Year(), t.Month(), t.Day(), t.Hour())
    fmt.Println(t.Format("02/01/2006"))
}

Layout yang sama yang dipakai Format dipakai Parse — "2006-01-02 15:04" mengajari parser di mana tiap bagian berada. Setelah jadi time.Time, seluruh method tersedia: ambil komponen, bandingkan, atau cetak ulang dalam format lain (02/01/2006).

Latihan singkat

Uji: parse tanggal `2007-01-15` dengan layout `2006-01-02` lalu cetak tahunnya — harus persis `2007`.