Go / golang time.Now().UnixNano() convert to milliseconds?

后端 未结 5 1438
栀梦
栀梦 2020-12-07 16:11

How can I get Unix time in Go in milliseconds?

I have the following function:

func makeTimestamp() int64 {
    return time.Now().UnixNano() % 1e6 / 1         


        
5条回答
  •  有刺的猬
    2020-12-07 16:43

    I think it's better to round the time to milliseconds before the division.

    func makeTimestamp() int64 {
        return time.Now().Round(time.Millisecond).UnixNano() / (int64(time.Millisecond)/int64(time.Nanosecond))
    }
    

    Here is an example program:

    package main
    
    import (
            "fmt"
            "time"
    )
    
    func main() {
            fmt.Println(unixMilli(time.Unix(0, 123400000)))
            fmt.Println(unixMilli(time.Unix(0, 123500000)))
            m := makeTimestampMilli()
            fmt.Println(m)
            fmt.Println(time.Unix(m/1e3, (m%1e3)*int64(time.Millisecond)/int64(time.Nanosecond)))
    }
    
    func unixMilli(t time.Time) int64 {
            return t.Round(time.Millisecond).UnixNano() / (int64(time.Millisecond) / int64(time.Nanosecond))
    }
    
    func makeTimestampMilli() int64 {
            return unixMilli(time.Now())
    }
    

    The above program printed the result below on my machine:

    123
    124
    1472313624305
    2016-08-28 01:00:24.305 +0900 JST
    

提交回复
热议问题