[go] 시간 빼기 Go에서 시간에서 기간

나는 time.Time에서 얻은 가치를 가지고 있으며 time.Now()정확히 1 개월 전의 다른 시간을 얻고 싶습니다.

나는 감산이 가능합니다 알고 time.Sub()(다른하고자하는 time.Time),하지만이 발생합니다 time.Duration나는 그것을 주변에 다른 방법이 필요합니다.



답변

AddDate 시도 :

package main

import (
    "fmt"
    "time"
)

func main() {
    now := time.Now()

    fmt.Println("now:", now)

    then := now.AddDate(0, -1, 0)

    fmt.Println("then:", then)
}

생성 :

now: 2009-11-10 23:00:00 +0000 UTC
then: 2009-10-10 23:00:00 +0000 UTC

플레이 그라운드 : http://play.golang.org/p/QChq02kisT


답변

Thomas Browne의 의견에 대한 응답으로 lnmx의 답변 은 날짜를 뺄 때만 작동하기 때문에 time.Time 유형에서 시간을 빼는 코드를 수정했습니다.

package main

import (
    "fmt"
    "time"
)

func main() {
    now := time.Now()

    fmt.Println("now:", now)

    count := 10
    then := now.Add(time.Duration(-count) * time.Minute)
    // if we had fix number of units to subtract, we can use following line instead fo above 2 lines. It does type convertion automatically.
    // then := now.Add(-10 * time.Minute)
    fmt.Println("10 minutes ago:", then)
}

생성 :

now: 2009-11-10 23:00:00 +0000 UTC
10 minutes ago: 2009-11-10 22:50:00 +0000 UTC

말할 것도없이 필요 에 따라 time.Hour또는 time.Second대신 사용할 수도 있습니다 time.Minute.

플레이 그라운드 : https://play.golang.org/p/DzzH4SA3izp


답변

다음을 부정 할 수 있습니다 time.Duration.

then := now.Add(- dur)

time.Duration대해 비교할 수도 있습니다 0.

if dur > 0 {
    dur = - dur
}

then := now.Add(dur)

http://play.golang.org/p/ml7svlL4eW 에서 작동 예제를 볼 수 있습니다 .


답변

거기에 time.ParseDuration행복, 부정적인 기간을 수락 할 매뉴얼에 따라 . 그렇지 않으면 처음에 정확한 기간을 얻을 수있는 기간을 부정 할 필요가 없습니다.

예를 들어 1 시간 반을 빼야 할 때 다음과 같이 할 수 있습니다.

package main

import (
    "fmt"
    "time"
)

func main() {
    now := time.Now()

    fmt.Println("now:", now)

    duration, _ := time.ParseDuration("-1.5h")

    then := now.Add(duration)

    fmt.Println("then:", then)
}

https://play.golang.org/p/63p-T9uFcZo


답변