在golang中获取3年前的时间戳?

18

我希望获取3年前的Unix时间戳,现在我使用的是:

time.Now().Unix(() - 3 * 3600 * 24 * 365

这并不是非常准确的(因为一年可能有366天)。

2个回答

48

只需使用Time.AddDate()方法,您可以指定要添加的年份、月份和天数,所有这些都可以是负数,如果您想回到过去:

AddDate()方法声明:

func (t Time) AddDate(years int, months int, days int) Time

例子:

t := time.Now()
fmt.Println(t)
t2 := t.AddDate(-3, 0, 0)
fmt.Println(t2)

输出(在Go Playground上尝试):

2009-11-10 23:00:00 +0000 UTC
2006-11-10 23:00:00 +0000 UTC

2
也许你可以做到这一点。
package main

import (
    "fmt"
    "time"
)

func timeShift(now time.Time, timeType string, shift int) time.Time {
    var shiftTime time.Time
    switch timeType {
    case "year":
        shiftTime = now.AddDate(shift, 0, 0)
    case "month":
        shiftTime = now.AddDate(0, shift, 0)
    case "day":
        shiftTime = now.AddDate(0, 0, shift)
    case "hour":
        shiftTime = now.Add(time.Hour * time.Duration(shift))
    case "minute":
        shiftTime = now.Add(time.Minute * time.Duration(shift))
    case "second":
        shiftTime = now.Add(time.Second * time.Duration(shift))
    default:
        shiftTime = now
    }
    return shiftTime
}

func main(){
    d := time.Now().UTC()
    fmt.Println(timeShift(d, "month", 1))
    fmt.Println(timeShift(d, "day", -1))
    fmt.Println(timeShift(d, "hour", -1))
    fmt.Println(timeShift(d, "minute", -1))
    fmt.Println(timeShift(d, "second", -1))
}


所以你的意思是,通过“shift”年数来调整“now”的时间: now.AddDate(shift, 0, 0)使用你的函数,可以将当前时间调整为@roger三年前的时间,具体操作如下: timeShift(time.Now(), year, -3) - Tom Anderson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接