21

日付から週、週から日、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: 関数引数の time.Duration 型として nanosecs (型 int64) を使用できません

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

私は何が欠けていますか?
ありがとう

4

3 に答える 3

5

jnmlの答えは機能し、より慣用的なものです。しかし、元のコードが機能しなかった理由を説明するには、1 行を変更するだけです。

date := base.Add(time.Duration(nanosecs))ナノ秒を time.Duration にキャストします。これは、int64 ではなく、Add が期待するタイプです。Go は型を自動的にキャストしないため、型が int64 であると不平を言います。

于 2013-07-13T18:31:48.413 に答える
1

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"
}
于 2015-08-05T05:17:25.010 に答える