像golang中的python timedelta

che*_*oza 18 go

我希望获得一个日期时间,从一个日期计算几周,从一周开始计算几天,从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
Run Code Online (Sandbox Code Playgroud)

我试图通过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)

}
Run Code Online (Sandbox Code Playgroud)

prog.go:21:不能使用nanosecs(类型int64)作为函数参数中的time.Duration类型

http://play.golang.org/p/XWSK_QaXrQ

我错过了什么?
谢谢

zzz*_*zzz 20

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)
}
Run Code Online (Sandbox Code Playgroud)

操场


产量

2013-01-07 18:25:55 +0000 UTC
Run Code Online (Sandbox Code Playgroud)

  • 用`time.Duration(周)`替换`int64(周)` (2认同)

Jer*_*all 5

jnml的答案有效,而且比较惯用.但为了说明为什么你的原始代码不起作用,你所要做的就是改变一行.

date := base.Add(time.Duration(nanosecs))将nanosecs转换为time.Duration,这是Add期望的类型而不是int64.Go不会自动为您转换类型,因此它抱怨类型为int64.