Что-то вроде python timedelta в golang
Я хочу получить дату-время, считая недели с даты, дней с недели и секунд с 00:00.
С Python я могу использовать это:
BASE_TIME = datetime.datetime(1980,1,6,0,0)
tdelta = datetime.timedelta(weeks = 1722,
days = 1,
seconds = 66355)
mydate = BASE_DATE + tdelta
Я пытаюсь получить его с помощью Go, но у меня есть некоторые проблемы для его достижения:
package main
import (
"fmt"
"time"
)
var base = time.Date(1980, 1, 6, 0, 0, 0, 0, time.UTC)
func main() {
weeks := 1722
days := 1
seconds := 66355
weeksToSecs := 7 * 24 * 60 * 60
daysToSecs := 24 * 60 * 60
totalSecs := (weeks * weeksToSecs) + (days * daysToSecs) + seconds
nanosecs := int64(totalSecs) * 1000000000
//delta := time.Date(0, 0, 0, 0, 0, totalSecs, 0, time.UTC)
date := base.Add(nanosecs)
fmt.Printf("Result: %s", date)
}
prog.go: 21: нельзя использовать наносеку (тип int64) как тип time.Duration в аргументе функции
http://play.golang.org/p/XWSK_QaXrQ
Что мне не хватает?
Спасибо
Ответы
Ответ 1
package main
import (
"fmt"
"time"
)
func main() {
baseTime := time.Date(1980, 1, 6, 0, 0, 0, 0, time.UTC)
date := baseTime.Add(1722*7*24*time.Hour + 24*time.Hour + 66355*time.Second)
fmt.Println(date)
}
Игровая площадка
Выход
2013-01-07 18:25:55 +0000 UTC
Ответ 2
jnml отвечает и работает более идиоматично. Но чтобы проиллюстрировать, почему ваш исходный код не работал, все, что вам нужно сделать, это изменить одну строку.
date := base.Add(time.Duration(nanosecs))
будет наносить наносеку на время. Продолжительность, которая является типом, который добавляет в отличие от int64. Go не будет автоматически вводить тип для вас, поэтому он жаловался на тип, являющийся int64.
Ответ 3
timeutil поддерживает timedelta и strftime.
package main
import (
"fmt"
"time"
"github.com/leekchan/timeutil"
)
func main() {
base := time.Date(2015, 2, 3, 0, 0, 0, 0, time.UTC)
td := timeutil.Timedelta{Days: 10, Minutes: 17, Seconds: 56}
result := base.Add(td.Duration())
fmt.Println(result) // "2015-02-13 00:17:56 +0000 UTC"
}