首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >类似于golang中的python timedelta

类似于golang中的python timedelta
EN

Stack Overflow用户
提问于 2013-07-14 00:06:53
回答 2查看 10.1K关注 0票数 21

我想要一个日期时间,从日期开始计算周,从一周开始计算天,从00:00时间开始计算秒。

在Python中,我可以这样使用:

代码语言:javascript
复制
BASE_TIME = datetime.datetime(1980,1,6,0,0)
tdelta = datetime.timedelta(weeks = 1722,
                            days = 1,
                            seconds = 66355)
mydate = BASE_DATE + tdelta

我正在尝试用Go获取它,但我有一些问题要达到它:

代码语言:javascript
复制
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

我错过了什么?

谢谢

EN

回答 2

Stack Overflow用户

发布于 2013-07-14 02:31:48

jnml的答案是有效的,而且更符合go的习惯。但是为了说明为什么你的原始代码不能工作,你需要做的就是修改一行代码。

date := base.Add(time.Duration(nanosecs))会将nanosecs转换为time.Duration,这是Add所期望的类型,而不是int64。Go不会自动为你转换一个类型,所以它抱怨类型为int64。

票数 5
EN

Stack Overflow用户

发布于 2015-08-05 13:17:25

timeutil支持时间增量和strftime。

代码语言:javascript
复制
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"
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17631900

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档