2013-07-13 56 views
16

我想要得到一個日期時間,從一個日期開始計算幾個星期,從一個星期幾天開始,從00:00開始計時。golang中的python timedelta之類的東西

使用Python,我可以用這個:

BASE_TIME = datetime.datetime(1980,1,6,0,0) 
tdelta = datetime.timedelta(weeks = 1722, 
          days = 1, 
          seconds = 66355) 
mydate = BASE_DATE + tdelta 

我想一起去得到它,但我有一些問題,以達到它:

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

我失蹤了什麼?
感謝

回答

17
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) 
} 

Playground


輸出

2013-01-07 18:25:55 +0000 UTC 
+0

真棒@jnml非常感謝.. – chespinoza

+0

我應該如何通過像var一樣的周添加?如果我傳遞int64(周)編譯器說prog.go:12:無效操作:int64(星期)* 7 * 24 * time.Hour(不匹配的類型int64和time.Duration)http://play.golang.org/ p/P1Dw258gRW – chespinoza

+2

用'time.Duration(周)替換'int64(weeks)'' –

4

jnml的答案作品,是更地道走。但要說明爲什麼您的原始代碼不起作用,您只需更改一行即可。

date := base.Add(time.Duration(nanosecs))會將nanosecs投射到一個時間。這是Add期望的類型,而不是int64。 Go不會自動爲你輸入一個類型,所以它抱怨類型是int64。

+0

是的,謝謝@Jeremy_Wall – chespinoza

0

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" 
}