Ответ 1
Используйте Time.AddDate()
:
myDate.AddDate(0, 0, 7 * weeksToAdd)
Я пытаюсь добавить несколько дней (на самом деле несколько недель) к существующей дате в 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
не могут быть умножены.
Как добавить дни к дате?
Используйте Time.AddDate()
:
myDate.AddDate(0, 0, 7 * weeksToAdd)
Вам нужно преобразовать 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):
Нет определения для единиц дня или больше, чтобы избежать путаницы в переходах переходов на летнее время.