Время идти / голанг.Теперь.)(Unixnano () конвертировать в миллисекунды?
Как я могу получить время Unix в Go в миллисекундах?
У меня есть следующие функции:
func makeTimestamp() int64 {
return time.Now().UnixNano() % 1e6 / 1e3
}
Мне нужно меньше точности и только миллисекунды.
4 ответов
просто разделить его:
func makeTimestamp() int64 {
return time.Now().UnixNano() / int64(time.Millisecond)
}
вот пример, который можно скомпилировать и запустить, чтобы увидеть выход
package main
import (
"time"
"fmt"
)
func main() {
a := makeTimestamp()
fmt.Printf("%d \n", a)
}
func makeTimestamp() int64 {
return time.Now().UnixNano() / int64(time.Millisecond)
}
как указывает @Jono в ответе @OneOfOne, правильный ответ должен учитывать продолжительность наносекунды. Например:
func makeTimestamp() int64 {
return time.Now().UnixNano() / (int64(time.Millisecond)/int64(time.Nanosecond))
}
ответ OneOfOne работает, потому что time.Nanosecond
случается 1
, и деления на 1 не имеет никакого эффекта. Я не знаю достаточно о go, чтобы знать, насколько вероятно, что это изменится в будущем, но для строго правильного ответа я бы использовал эту функцию, а не ответ OneOfOne. Я сомневаюсь, что есть какой-либо недостаток производительности, поскольку компилятор должен быть способный оптимизировать это совершенно хорошо.
см.https://en.wikipedia.org/wiki/Dimensional_analysis
другой способ взглянуть на это заключается в том, что оба time.Now().UnixNano()
и time.Millisecond
используйте те же единицы измерения (наносекунды). Пока это правда, ответ OneOfOne должен работать отлично.
Я думаю, что лучше округлить время до миллисекунд до разделения.
func makeTimestamp() int64 {
return time.Now().Round(time.Millisecond).UnixNano() / (int64(time.Millisecond)/int64(time.Nanosecond))
}
вот пример программы:
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())
}
вышеуказанная программа напечатала результат ниже на моей машине:
123
124
1472313624305
2016-08-28 01:00:24.305 +0900 JST