Добавить дни до даты в Go

Я пытаюсь добавить несколько дней (на самом деле несколько недель) к существующей дате в Go. я пытался myDate.Add(time.Hour * 24 * 7 * weeksToAdd)

Но я получаю сообщение об ошибке, когда пытаюсь построить: invalid operation: time.Hour * startAdd (mismatched types time.Duration and float64)

Итак, weeksToAdd в настоящее время является float64, но я могу изменить его на int или что-то еще. Изменение его на int изменило мою ошибку, сказав, что int и Duration не могут быть умножены.

Как добавить дни к дате?

Ответ 1

Используйте Time.AddDate():

myDate.AddDate(0, 0, 7 * weeksToAdd)

Ответ 2

Вам нужно преобразовать weeksToAdd в time.Duration:

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

В Go псевдонимы типов нельзя использовать взаимозаменяемо, хотя time.Duration является технически int64.

Кроме того, здесь, хотя числовые константы 24 и 7 не указаны явно, их все равно можно использовать как-is, см. https://blog.golang.org/constants для подробного объяснения.

См. http://play.golang.org/p/86TFFlixWj для запускаемого примера.

Как упоминалось в комментариях и другом ответе, использование time.AddDate() предпочтительнее time.Add() при работе на длительности, превышающей 24 часа, так как time.Duration в основном представляет собой наносекунды. При работе с днями, неделями, месяцами и годами необходимо проявлять большую осторожность из-за таких вещей, как переход на летнее время, високосные годы и, возможно, потенциальные прыжки секунд.

Документация типа time.Duration и связанные с ней константы, представляющие единицы, подчеркивают эту проблему (https://golang.org/pkg/time/#Duration):

Нет определения для единиц дня или больше, чтобы избежать путаницы в переходах переходов на летнее время.