2015-10-07 30 views
10

Git'te mevcut bir tarihe birkaç gün (aslında birkaç hafta) eklemeyi deniyorum. Ben myDate.Add(time.Hour * 24 * 7 * weeksToAdd)Günde 0 güne ekle Alışveriş günlüğüne Ekle

denedi Ama oluşturmaya çalıştığınızda bir hata alıyorum: invalid operation: time.Hour * startAdd (mismatched types time.Duration and float64)

Yani weeksToAdd henüz float64, ama int ya da her neyse onu değiştirebilir. Bir int ile değiştirmek, yalnızca int ve Duration'un çarpılamayacağını söyleyen hatayı değiştirdi.

Bir tarihe nasıl gün eklerim?

cevap

11

Bir time.Duration içine weeksToAdd dönüştürmek gerekir: Git

myDate.Add(time.Hour * 24 * 7 * time.Duration(weeksToAdd)) 

, tip diğer adları time.Duration teknik olarak bir int64 olsa bile birbirinin kullanılamaz. Ayrıca, burada, sayısal sabitler (24 ve 7) açıkça yazılmasa da, hala olduğu gibi kullanılabilirler, daha ayrıntılı bir açıklama için https://blog.golang.org/constants'a bakınız. Çalışan örnek için bkz http://play.golang.org/p/86TFFlixWj. time.Duration temelde nanosaniye temsil beri, 24 saat daha üstün süresine çalışırken

görüş ve başka cevapta belirtildiği üzere

, time.AddDate() kullanımı time.Add() tercih edilir. Günler, haftalar, aylar ve yıllar ile çalışırken, gün ışığından yararlanma zamanı, artık yıllar ve belki de potansiyel olarak sıçrayan saniyeler gibi şeyler nedeniyle çok fazla özen gösterilmelidir.

time.Duration türü için dokümantasyon ve birimlerini temsil eden ilişkili sabitleri bu sorunu (https://golang.org/pkg/time/#Duration) vurgulamak: yaz saati dilimi geçişler arasında karışıklığı önlemek için Günün birimleri veya daha büyük hiçbir tanımı yoktur

.

+2

Time.Add yerinde çalışmaz. –

+1

Evet, bu doğru ve örneği düzeltdim, ama buradaki nokta da bu. – SirDarius

+0

Düzenleme için teşekkürler neden 24 ve 7 kullanabiliyorum açıklamak. Bu benim takip sorusu olmak üzereydi. –