now language golang time go unix-timestamp date-conversion

language - Go/golang time.Now(). UnixNano() convierte a milisegundos?



golang weekday (4)

¿Cómo puedo obtener el tiempo de Unix en Ir en milisegundos?

Tengo la siguiente función:

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

Necesito menos precisión y solo quiero milisegundos.


Como @Jono señala en la respuesta de @ OneOfOne, la respuesta correcta debe tener en cuenta la duración de un nanosegundo. P.ej:

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

La respuesta de OneOfOne funciona porque el tiempo. time.Nanosecond es 1 y dividir por 1 no tiene ningún efecto. No sé lo suficiente sobre cómo saber qué probabilidades hay de que esto cambie en el futuro, pero para la respuesta estrictamente correcta usaría esta función, no la respuesta de OneOfOne. Dudo que haya alguna desventaja de rendimiento, ya que el compilador debería poder optimizar esto perfectamente.

Ver https://en.wikipedia.org/wiki/Dimensional_analysis

Otra forma de ver esto es que tanto time.Now().UnixNano() y time.Millisecond usan las mismas unidades (Nanosegundos). Mientras eso sea cierto, la respuesta de OneOfOne debería funcionar perfectamente.


Creo que es mejor redondear el tiempo a milisegundos antes de la división.

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

Aquí hay un programa de ejemplo:

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

El programa anterior imprimió el resultado a continuación en mi máquina:

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


Mantenlo simple.

func NowAsUnixMilli() int64 { return time.Now().UnixNano() / 1e6 }


Solo divídelo

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

Aquí hay un ejemplo que puede compilar y ejecutar para ver la salida

package main import ( "time" "fmt" ) func main() { a := makeTimestamp() fmt.Printf("%d /n", a) } func makeTimestamp() int64 { return time.Now().UnixNano() / int64(time.Millisecond) }