Time 在golang获得3年前的时间戳?

Time 在golang获得3年前的时间戳?,time,go,unix-timestamp,Time,Go,Unix Timestamp,我想获得3年前的unix时间戳,我现在使用它: time.Now().Unix(() - 3 * 3600 * 24 * 365 无论如何,这并不准确(因为一年可能有366天)。只需使用一种方法,在该方法中,您可以指定添加年、月和天的时间,如果您想返回时间,所有这些时间也可以是负数: AddDate()方法声明: func (t Time) AddDate(years int, months int, days int) Time 例如: t := time.Now() fmt.Printl

我想获得3年前的unix时间戳,我现在使用它:

time.Now().Unix(() - 3 * 3600 * 24 * 365
无论如何,这并不准确(因为一年可能有366天)。

只需使用一种方法,在该方法中,您可以指定添加年、月和天的时间,如果您想返回时间,所有这些时间也可以是负数:

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)
输出(在上尝试):

也许你能做到

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