У меня есть time.Time
значение, полученное из, time.Now()
и я хочу получить другое время, ровно 1 месяц назад.
Я знаю, что вычитание возможно с помощью time.Sub()
(который хочет другого time.Time
), но это приведет к a, time.Duration
а мне нужно наоборот.
Sub
чтобы вычесть время. Ага!В ответ на комментарий Томаса Брауна, поскольку ответ lnmx работает только для вычитания даты, вот модификация его кода, которая работает для вычитания времени из типа time.Time.
Производит:
Не говоря уже о том, что вы также можете использовать
time.Hour
илиtime.Second
вместоtime.Minute
в соответствии с вашими потребностями.Игровая площадка: https://play.golang.org/p/DzzH4SA3izp
источник
ParseDuration
статические значения! Просто используйте-10 * time.Minute
, для чего эти константы определены. Например,time.Now().Add(-10 * time.Minute)
это все, что вам нужно.now.Add(-10 * time.Minute)
кnow.Add(time.Duration(-10) * time.Minute)
в случае вашего получаю сообщение об ошибке при умножении длительности на целочисленное значение ...Вы можете отрицать
time.Duration
:Вы даже можете сравнить
time.Duration
с0
:Вы можете увидеть рабочий пример на http://play.golang.org/p/ml7svlL4eW
источник
-1 * dur
будет работать, ноd := -1 ; dur = d * dur
сгенерирует ошибку: «Несоответствующие типы int и time.Duration»Есть такие,
time.ParseDuration
которые с радостью примут отрицательные значения продолжительности, как указано в руководстве . Иначе говоря, нет необходимости отрицать продолжительность, когда вы в первую очередь можете получить точную продолжительность.Например, когда вам нужно вычесть полтора часа, вы можете сделать это так:
https://play.golang.org/p/63p-T9uFcZo
источник