Go Time Package: Zaman Dilimi ve Parsing Sorunlarını Çözmek
Go'da zaman işlemek ilk bakışta basit görünse de, zaman dilimleri ve tarih formatları sık sık sorun çıkarır. Time paketinin Location ve Layout mekanizması doğru anlaşılmazsa, UTC'ye dönüşüm yanlış olur ya da parsing başarısız kalır.
Go'da time.Time her zaman UTC içinde saklanır, ancak ekranda göstermek ya da dış kaynaktan okumak istediğinde zaman dilimi uyuşmazlığı oluşur. Ayrıca tarih stringini parse ederken format (layout) hatasıyla saat boş kalabilir.
Bir zamanı başka bir zaman dilimine dönüştürmek için önce Location yükle, sonra In() metodunu kullan.
1package main23import (4"fmt"5"time"6)78func main() {9// UTC'de şu anki zaman10utc:= time.Now().UTC()11fmt.Println("UTC:", utc)1213// Istanbul zaman dilimini yükle14loc, err:= time.LoadLocation("Europe/Istanbul")15if err!= nil {16panic(err)17}1819// Aynı zamanı Istanbul diliminde göster20istanbul:= utc.In(loc)21fmt.Println("Istanbul:", istanbul)22}Çıktı:
1UTC: 2024-01-15 14:30:00 +0000 UTC2Istanbul: 2024-01-15 17:30:00 +0300 EETParse ederken layout eksikse ya da yanlışsa saat kısmı atlanır. Go'da layout sabittir; örnek bir zamanı kullanarak formatı tanımlarsın.
1package main23import (4"fmt"5"time"6)78func main() {9// Yanlış: layout eksik10str:= "2024-01-15 14:30:00"11t, _:= time.Parse("2006-01-02", str) // Sadece tarih12fmt.Println("Hatalı parse:", t) // Saat 00:00:00 olur1314// Doğru: tam layout15t2, _:= time.Parse("2006-01-02 15:04:05", str)16fmt.Println("Doğru parse:", t2)17}Çıktı:
1Hatalı parse: 2024-01-15 00:00:00 +0000 UTC2Doğru parse: 2024-01-15 14:30:00 +0000 UTCEğer stringde zaman dilimi bilgisi varsa ve onu korumak istiyorsan, ParseInLocation() kullan.
1package main23import (4"fmt"5"time"6)78func main() {9str:= "2024-01-15 14:30:00"10loc, _:= time.LoadLocation("Europe/Istanbul")1112// Parse et, ancak sonucu Istanbul diliminde tut13t, _:= time.ParseInLocation("2006-01-02 15:04:05", str, loc)14fmt.Println("Istanbul saati:", t)15fmt.Println("UTC karşılığı:", t.UTC())16}Çıktı:
1Istanbul saati: 2024-01-15 14:30:00 +0300 EET2UTC karşılığı: 2024-01-15 11:30:00 +0000 UTCVeritabanında her zaman UTC sakla, uygulamada UTC ile çalış. Ekran gösterimi ya da API yanıtında kullanıcının zaman dilimine dönüştür. Layout tanımlarken Go'nun sabit örneğini (Mon Jan 2 15:04:05 MST 2006) ezberle; bu sıra değişmez.
0 yorum