How to parse unix timestamp to time.Time

后端 未结 6 2023
悲&欢浪女
悲&欢浪女 2020-12-02 05:27

I\'m trying to parse an Unix timestamp but I get out of range error. That doesn\'t really makes sense to me, because the layout is correct (as in the Go docs):



        
相关标签:
6条回答
  • 2020-12-02 06:10

    According to the go documentation, Unix returns a local time.

    Unix returns the local Time corresponding to the given Unix time

    This means the output would depend on the machine your code runs on, which, most often is what you need, but sometimes, you may want to have the value in UTC.

    To do so, I adapted the snippet to make it return a time in UTC:

    i, err := strconv.ParseInt("1405544146", 10, 64)
    if err != nil {
        panic(err)
    }
    tm := time.Unix(i, 0)
    fmt.Println(tm.UTC())
    

    This prints on my machine (in CEST)

    2014-07-16 20:55:46 +0000 UTC
    
    0 讨论(0)
  • 2020-12-02 06:16

    I do a lot of logging where the timestamps are float64 and use this function to get the timestamps as string:

    func dateFormat(layout string, d float64) string{
        intTime := int64(d)
        t := time.Unix(intTime, 0)
        if layout == "" {
            layout = "2006-01-02 15:04:05"
        }
        return t.Format(layout)
    }
    
    0 讨论(0)
  • 2020-12-02 06:26

    Just use time.Parse

    example:

    package main
    
    import (
        "fmt"
        "time"
    )
    
    func main() {
        fromString := "Wed, 6 Sep 2017 10:43:01 +0300"
        t, e := time.Parse("Mon, _2 Jan 2006 15:04:05 -0700", fromString)
        if e != nil {
            fmt.Printf("err: %s\n", e)
        }
        fmt.Printf("UTC time: %v\n", t.UTC())
    }
    

    Working example on play.golang.org.

    0 讨论(0)
  • 2020-12-02 06:28

    The time.Parse function does not do Unix timestamps. Instead you can use strconv.ParseInt to parse the string to int64 and create the timestamp with time.Unix:

    package main
    
    import (
        "fmt"
        "time"
        "strconv"
    )
    
    func main() {
        i, err := strconv.ParseInt("1405544146", 10, 64)
        if err != nil {
            panic(err)
        }
        tm := time.Unix(i, 0)
        fmt.Println(tm)
    }
    

    Output:

    2014-07-16 20:55:46 +0000 UTC
    

    Playground: http://play.golang.org/p/v_j6UIro7a

    Edit:

    Changed from strconv.Atoi to strconv.ParseInt to avoid int overflows on 32 bit systems.

    0 讨论(0)
  • 2020-12-02 06:28

    You can directly use time.Unix function of time which converts the unix time stamp to UTC

    package main
    
    import (
      "fmt"
      "time"
    )
    
    
    func main() {
        unixTimeUTC:=time.Unix(1405544146, 0) //gives unix time stamp in utc 
    
        unitTimeInRFC3339 :=unixTimeUTC.Format(time.RFC3339) // converts utc time to RFC3339 format
    
        fmt.Println("unix time stamp in UTC :--->",unixTimeUTC)
        fmt.Println("unix time stamp in unitTimeInRFC3339 format :->",unitTimeInRFC3339)
    }
    

    Output

    unix time stamp in UTC :---> 2014-07-16 20:55:46 +0000 UTC
    unix time stamp in unitTimeInRFC3339 format :----> 2014-07-16T20:55:46Z
    

    Check in Go Playground: https://play.golang.org/p/5FtRdnkxAd

    0 讨论(0)
  • 2020-12-02 06:29

    Sharing a few functions which I created for dates:

    Please note that I wanted to get time for a particular location (not just UTC time). If you want UTC time, just remove loc variable and .In(loc) function call.

    func GetTimeStamp() string {
         loc, _ := time.LoadLocation("America/Los_Angeles")
         t := time.Now().In(loc)
         return t.Format("20060102150405")
    }
    func GetTodaysDate() string {
        loc, _ := time.LoadLocation("America/Los_Angeles")
        current_time := time.Now().In(loc)
        return current_time.Format("2006-01-02")
    }
    
    func GetTodaysDateTime() string {
        loc, _ := time.LoadLocation("America/Los_Angeles")
        current_time := time.Now().In(loc)
        return current_time.Format("2006-01-02 15:04:05")
    }
    
    func GetTodaysDateTimeFormatted() string {
        loc, _ := time.LoadLocation("America/Los_Angeles")
        current_time := time.Now().In(loc)
        return current_time.Format("Jan 2, 2006 at 3:04 PM")
    }
    
    func GetTimeStampFromDate(dtformat string) string {
        form := "Jan 2, 2006 at 3:04 PM"
        t2, _ := time.Parse(form, dtformat)
        return t2.Format("20060102150405")
    }
    
    0 讨论(0)
提交回复
热议问题