Comment obtenir le temps Unix dans Go en millisecondes?
J'ai la fonction suivante:
func makeTimestamp() int64 {
return time.Now().UnixNano() % 1e6 / 1e3
}
J'ai besoin de moins de précision et je ne veux que des millisecondes.
Il suffit de le diviser:
func makeTimestamp() int64 {
return time.Now().UnixNano() / int64(time.Millisecond)
}
Voici un exemple que vous pouvez compiler et exécuter pour afficher le résultat
package main
import (
"time"
"fmt"
)
func main() {
a := makeTimestamp()
fmt.Printf("%d \n", a)
}
func makeTimestamp() int64 {
return time.Now().UnixNano() / int64(time.Millisecond)
}
Comme @Jono le souligne dans la réponse de @ OneOfOne, la réponse correcte doit prendre en compte la durée d'une nanoseconde. Par exemple:
func makeTimestamp() int64 {
return time.Now().UnixNano() / (int64(time.Millisecond)/int64(time.Nanosecond))
}
La réponse de OneOfOne fonctionne car time.Nanosecond
Se trouve être 1
, Et la division par 1 n'a aucun effet. Je ne sais pas assez pour savoir à quel point cela est susceptible de changer à l'avenir, mais j'utiliserais cette fonction pour la réponse tout à fait correcte, pas la réponse de OneOfOne. Je doute qu'il y ait un inconvénient en termes de performances, car le compilateur devrait pouvoir l'optimiser parfaitement.
Voir https://en.wikipedia.org/wiki/analyse de dimensions
Une autre façon de voir les choses est que time.Now().UnixNano()
et time.Millisecond
Utilisent les mêmes unités (nanosecondes). Tant que cela est vrai, la réponse de OneOfOne devrait parfaitement fonctionner.
Rester simple.
func NowAsUnixMilli() int64 {
return time.Now().UnixNano() / 1e6
}
Je pense qu'il est préférable d'arrêter le temps en millisecondes avant la division.
func makeTimestamp() int64 {
return time.Now().Round(time.Millisecond).UnixNano() / (int64(time.Millisecond)/int64(time.Nanosecond))
}
Voici un exemple de programme:
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())
}
Le programme ci-dessus a imprimé le résultat ci-dessous sur ma machine:
123
124
1472313624305
2016-08-28 01:00:24.305 +0900 JST