我想要一个日期时间,从日期开始计算周,从一周开始计算天,从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:不能将nanosecs (类型为int64)用作函数参数中的类型time.Duration
http://play.golang.org/p/XWSK_QaXrQ
我错过了什么?
谢谢
发布于 2013-07-14 02:31:48
jnml的答案是有效的,而且更符合go的习惯。但是为了说明为什么你的原始代码不能工作,你需要做的就是修改一行代码。
date := base.Add(time.Duration(nanosecs))
会将nanosecs转换为time.Duration,这是Add所期望的类型,而不是int64。Go不会自动为你转换一个类型,所以它抱怨类型为int64。
发布于 2015-08-05 13:17:25
timeutil支持时间增量和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"
}
https://stackoverflow.com/questions/17631900
复制相似问题