Zaman işleme oldukça karmaşıktır. Zaman ile ilgili yaygın yanlış varsayımlar şunları içerir.

  1. Bir gün 24 saat içerir.
  2. Bir saat 60 dakikadır.
  3. Bir hafta yedi gün içerir.
  4. Bir yıl 365 gün içerir.

Örneğin, 1 belirli bir anlık zamana 24 saat eklemek her zaman yeni bir takvim gününe yol açmaz.

Bu nedenle, zamanla uğraşırken, bu yanlış varsayımları daha güvenli ve doğru bir şekilde ele almaya yardımcı olan "time" paketini kullanın.

Anlık Zamanı Temsil Etmek İçin time.Time Kullan

Anlık zamanla uğraşırken, karşılaştırma, zaman eklemesi veya çıkarması için time.Time ve onun metodlarını kullanın.

Tavsiye Edilmez:

func isActive(now, start, stop int) bool {
  return start <= now && now < stop
}

Tavsiye Edilen:

func isActive(now, start, stop time.Time) bool {
  return (start.Before(now) || start.Equal(now)) && now.Before(stop)
}

Zaman Süreçlerini Temsil Etmek İçin time.Duration Kullan

Zaman süreçleriyle uğraşırken, time.Duration kullanın.

Tavsiye Edilmez:

func poll(delay int) {
  for {
    // ...
    time.Sleep(time.Duration(delay) * time.Millisecond)
  }
}
poll(10) // Saniye mi yoksa milisaniye mi?

Tavsiye Edilen:

func poll(delay time.Duration) {
  for {
    // ...
    time.Sleep(delay)
  }
}
poll(10*time
## `time.Time` ve `time.Duration`'ı Harici Sistemlerle Kullanma

Mümkün olduğu kadar, harici sistemlerle etkileşimde `time.Duration` ve `time.Time` kullanın, örneğin:

- Komut satırı bayrakları: [`flag`](https://golang.org/pkg/flag/), [`time.ParseDuration`](https://golang.org/pkg/time/#ParseDuration) aracılığıyla `time.Duration`'ı destekler.
- JSON: [`encoding/json`](https://golang.org/pkg/encoding/json/), [`UnmarshalJSON` yöntemi](https://golang.org/pkg/time/#Time.UnmarshalJSON) kullanarak `time.Time`'ı [RFC 3339](https://tools.ietf.org/html/rfc3339) dizesine kodlamayı destekler.
- SQL: [`database/sql`](https://golang.org/pkg/database/sql/), `DATETIME` or `TIMESTAMP` sütunlarını `time.Time`'a dönüştürür ve altta yatan sürücü tarafından destekleniyorsa geri döner.
- YAML: [`gopkg.in/yaml.v2`](https://godoc.org/gopkg.in/yaml.v2), [`time.ParseDuration`](https://golang.org/pkg/time/#ParseDuration) aracılığıyla `time.Time`'ı [RFC 3339](https://tools.ietf.org/html/rfc3339) dizesi olarak kullanmayı destekler.

Bu etkileşimlerde `time.Duration` kullanılamadığında, birim alanı ve `int` veya `float64` kullanın.

Örneğin, `encoding/json` `time.Duration`'ı desteklemediğinden, birim alanı alan adına dahil edilmiştir.

**Tavsiye Edilmez:**
```go
// {"interval": 2}
type Config struct {
  Interval int `json:"interval"`
}

Tavsiye Edilen:

// {"intervalMillis": 2000}
type Config struct {
  IntervalMillis int `json:"intervalMillis"`
}

Bu etkileşimlerde time.Time kullanılamadığında, aksi belirtilmedikçe, string kullanın ve zaman damgalarını RFC 3339 biçimine göre biçimlendirin. Varsayılan olarak, Time.UnmarshalText bu formattı kullanır ve Time.Format ve time.Parse aracılığıyla time.RFC3339 kullanılabilir.

Pratikte bir problem olmasa da, lütfen "time" paketinin artık saniye zaman damgalarını ayrıştırmadığını (8728) ve hesaplamalarda saniyeleri dikkate almadığını (15190) unutmayın. İki zaman arasındaki fark, o iki zaman arasında meydana gelebilecek olan ek saniyeleri içermeyecektir.