Podstawy pakietu time
Praca z czasem, przedziałami czasu i formatowaniem
Podstawy pakietu time to bezpłatna lekcja Go Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Go Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Go Academy zawiera 4 lekcji w sumie.
time.Time — podstawowy typ
Centralnym typem pakietu time jest time.Time. Bieżący czas można pobrać za pomocą time.Now():
package main
import ("fmt"; "time")
func main() {
now := time.Now()
fmt.Println(now) // 2024-01-15 10:30:00.123456789 +0000 UTC
fmt.Println(now.Year()) // 2024
fmt.Println(now.Month()) // January
fmt.Println(now.Day()) // 15
fmt.Println(now.Hour()) // 10
fmt.Println(now.Minute()) // 30
fmt.Println(now.Weekday()) // Monday
}time.Duration
time.Duration reprezentuje czas, który upłynął, wyrażony w nanosekundach. Dla czytelności należy używać stałych typowanych:
package main
import ("fmt"; "time")
func main() {
d := 2*time.Hour + 30*time.Minute + 15*time.Second
fmt.Println(d) // 2h30m15s
fmt.Println(d.Hours()) // 2.504166...
fmt.Println(d.Minutes()) // 150.25
fmt.Println(d.Seconds()) // 9015
fmt.Println(d.Milliseconds()) // 9015000
}time.Add i time.Sub
Do czasu można dodać czas trwania, a odjęcie dwóch wartości czasu zwraca czas trwania:
package main
import ("fmt"; "time")
func main() {
now := time.Now()
tomorrow := now.Add(24 * time.Hour)
fmt.Println(tomorrow.Format("2006-01-02"))
deadline := now.Add(30 * time.Minute)
remaining := time.Until(deadline) // alias for deadline.Sub(now)
fmt.Printf("%.0f minutes left\n", remaining.Minutes())
}Formatowanie i analizowanie czasu
Go używa czasu referencyjnego Mon Jan 2 15:04:05 MST 2006 jako szablonu formatu (wartości 1–7 w tej kolejności):
package main
import ("fmt"; "time")
func main() {
now := time.Now()
// Format
fmt.Println(now.Format("2006-01-02")) // 2024-01-15
fmt.Println(now.Format("02/01/2006 15:04:05")) // 15/01/2024 10:30:00
fmt.Println(now.Format(time.RFC3339)) // 2024-01-15T10:30:00Z
fmt.Println(now.Format(time.Kitchen)) // 10:30AM
}time.Parse — analizowanie ciągów znaków
Ciąg znaków można przeanalizować do wartości time.Time, używając tego samego szablonu referencyjnego:
package main
import ("fmt"; "time")
func main() {
s := "2024-01-15"
t, err := time.Parse("2006-01-02", s)
if err != nil {
fmt.Println("parse error:", err)
return
}
fmt.Println(t.Year(), t.Month(), t.Day()) // 2024 January 15
// Parse RFC3339 (ISO 8601):
t2, _ := time.Parse(time.RFC3339, "2024-01-15T10:30:00Z")
fmt.Println(t2)
}time.Sleep i timery
Wykonanie można wstrzymać za pomocą time.Sleep, a jednorazowe timery utworzyć za pomocą time.NewTimer:
package main
import ("fmt"; "time")
func main() {
start := time.Now()
time.Sleep(100 * time.Millisecond)
fmt.Printf("slept for %v\n", time.Since(start))
// One-shot timer
timer := time.NewTimer(200 * time.Millisecond)
<-timer.C // blocks until timer fires
fmt.Println("timer fired")
}time.Ticker dla zdarzeń cyklicznych
time.NewTicker wysyła wartości przez swój kanał w regularnych odstępach:
package main
import ("fmt"; "time")
func main() {
ticker := time.NewTicker(500 * time.Millisecond)
defer ticker.Stop() // always stop to avoid goroutine leak
for i := 0; i < 3; i++ {
t := <-ticker.C
fmt.Println("tick at", t.Format("15:04:05.000"))
}
}time.Since i time.Until
Wygodne skróty do mierzenia czasu, który upłynął, oraz czasu pozostałego do zdarzenia:
package main
import ("fmt"; "time")
func benchmark(fn func()) time.Duration {
start := time.Now()
fn()
return time.Since(start) // = time.Now().Sub(start)
}
func main() {
d := benchmark(func() { time.Sleep(50 * time.Millisecond) })
fmt.Printf("took %v\n", d)
deadline := time.Now().Add(5 * time.Minute)
fmt.Printf("%.0f minutes remaining\n", time.Until(deadline).Minutes())
}Strefy czasowe
Go obsługuje strefy czasowe za pomocą time.Location. Strefy można wczytywać za pomocą time.LoadLocation:
package main
import ("fmt"; "time")
func main() {
utc := time.Now().UTC()
fmt.Println(utc)
loc, err := time.LoadLocation("America/New_York")
if err != nil { panic(err) }
nyTime := utc.In(loc)
fmt.Println(nyTime)
// Compare times — always in UTC internally
fmt.Println(utc.Equal(nyTime)) // true — same instant
}time.Unix — znaczniki czasu Unix
Konwersja między wartością time.Time a znacznikami czasu Unix:
package main
import ("fmt"; "time")
func main() {
now := time.Now()
unix := now.Unix() // seconds since epoch
unixMilli := now.UnixMilli() // milliseconds
unixNano := now.UnixNano() // nanoseconds
fmt.Println(unix, unixMilli, unixNano)
// Convert back:
t := time.Unix(unix, 0)
fmt.Println(t.Format(time.RFC3339))
}Szybki test
Jakiego czasu referencyjnego Go używa jako szablonu formatu?
Podsumowanie: pakiet time
Podsumowanie:
time.Now()— bieżący czas; dostęp do poszczególnych pól za pomocą.Year(),.Month()itd.time.Duration— nanosekundy; należy używaćtime.Hour,time.Minuteitd.t.Format(layout)/time.Parse(layout, s)— format korzysta z czasu referencyjnego2006-01-02 15:04:05time.Since/time.Untildo pomiaru czasu, który upłynął, i czasu pozostałegotime.NewTickerdo zdarzeń cyklicznych — zawsze należy używaćdefer Stop()
Często zadawane pytania
Czy lekcja „Podstawy pakietu time” jest bezpłatna?
Tak — pełny tekst „Podstawy pakietu time” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Go Academy, przejdź na CoddyKit PRO. Kurs Go Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Podstawy pakietu time”?
Praca z czasem, przedziałami czasu i formatowaniem Ćwiczysz Go Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Go Academy?
Nie wymagamy żadnego doświadczenia. Go Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „Podstawy pakietu time”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Go Academy?
Tak. Każda lekcja Go Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Pakiety fmt i strings
- strconv, math i sort
- Podstawy pakietu time
- Pakiety os i filepath