2015-10-07 10 views
10

Próbuję dodać liczbę dni (w rzeczywistości kilka tygodni) do istniejącej daty w Go. Próbowałem myDate.Add(time.Hour * 24 * 7 * weeksToAdd)Dodaj dni na dzień w Go

Ale pojawia się błąd, gdy próbuję zbudować: invalid operation: time.Hour * startAdd (mismatched types time.Duration and float64)

Więc weeksToAdd jest obecnie float64, ale mogę go zmienić na int lub cokolwiek. Zmiana na int zmieniła tylko mój błąd, aby powiedzieć, że int i Duration nie mogą zostać pomnożone.

Jak dodać dni do daty?

Odpowiedz

11

trzeba konwertować weeksToAdd w time.Duration:

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

w Go, aliasy typu nie mogą być stosowane zamiennie, chociaż time.Duration jest technicznie int64.

Również tutaj, mimo że stałe numeryczne 24 i 7 nie są jawnie wpisane, mogą być nadal używane tak jak są, zobacz https://blog.golang.org/constants, aby uzyskać szczegółowe wyjaśnienie.

Zobacz przykład http://play.golang.org/p/86TFFlixWj dla bieżącego przykładu.

Jak wspomniano w komentarzach i innej odpowiedzi, użycie time.AddDate() jest lepsze niż podczas pracy trwającej dłużej niż 24 godziny, ponieważ time.Duration zasadniczo reprezentuje nanosekundy. Pracując z dniami, tygodniami, miesiącami i latami, należy zachować ostrożność ze względu na takie kwestie, jak czas letni, lata przestępne i potencjalnie kilka sekund przestępnych.

Dokumentacja time.Duration rodzaju i przynależne stałe reprezentujące jednostki podkreślić tę kwestię (https://golang.org/pkg/time/#Duration):

Nie ma definicji dla jednostek dzień lub większe, aby uniknąć nieporozumień poprzek przejścia strefy czasu letniego.

+2

Time.Add nie działa w miejscu. –

+1

Cóż, to prawda, i naprawiłem ten przykład, ale poza tym chodzi o to. – SirDarius

+0

dzięki za wyjaśnienie, dlaczego mogę używać 24 i 7. To było moim następnym pytaniem. –