类似于golang中的python timedelta
我想得到一个日期时间,从一个日期算起几周,从一周算起几天,从00:00算起几秒 有了Python,我可以使用:类似于golang中的python timedelta,go,timedelta,Go,Timedelta,我想得到一个日期时间,从一个日期算起几周,从一周算起几天,从00:00算起几秒 有了Python,我可以使用: BASE_TIME = datetime.datetime(1980,1,6,0,0) tdelta = datetime.timedelta(weeks = 1722, days = 1, seconds = 66355) mydate = BASE_DATE + tdel
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:无法在函数参数中使用nanosecs(类型int64)作为类型time.Duration
我错过了什么?谢谢
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
jnml的答案是有效的,并且更加惯用。但是为了说明为什么您的原始代码不起作用,您所要做的就是更改一行代码
date:=base.Add(time.Duration(nanosecs))
将nanosecs强制转换为time.Duration,这是Add期望的类型,而不是int64。Go不会自动为您强制转换类型,因此它抱怨类型为int64。支持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"
}
我应该如何像一个var那样度过这几个星期?如果我通过了一个int64(weeks),编译器会说prog.go:12:无效操作:int64(weeks)*7*24*time.Hour(int64和time.Duration类型不匹配)将
int64(weeks)
替换为time.Duration(weeks)