2015-02-27 2 views

ответ

7

В Go объект "время" представлен значением типа структуры time.Time.

Вы можете создать Time из наносекундной временной метки с помощью функции time.Unix(sec int64, nsec int64), где она действительна передать nsec за пределы диапазона [0, 999999999].

И вы можете использовать функцию time.Since(t Time), которая возвращает прошедшее время с указанного времени как time.Duration (что в основном представляет собой разницу во времени в наносекундах).

t := time.Unix(0, yourTimestamp) 
elapsed := time.Since(t) 

Чтобы получить прошедшее время в часах, просто использовать Duration.Hours() метод, который возвращает продолжительность в часах в виде числа с плавающей точкой:

fmt.Printf("Elapsed time: %.2f hours", elapsed.Hours()) 

Попробуйте его на Go Playground.

Примечание:

Duration может форматировать себя разумно в таком формате, как "72h3m0.5s", реализованного в String() метода:

fmt.Printf("Elapsed time: %s", elapsed) 
+0

Чтобы сохранить некоторую погуглите, макс time.UnixNano() является: '2262 -04-11 23: 47: 16.854775807 +0000 UTC' – Highstead

3

Вы пройти наносекунд до time.Unix(0, ts), например:

func main() { 
    now := time.Now() 
    ts := int64(1257856852039812612) 
    timeFromTS := time.Unix(0, ts) 
    diff := now.Sub(timeFromTS) 
    fmt.Printf("now: %v\ntime from ts: %v\ndiff: %v\ndiff int:", now, timeFromTS, diff, int64(diff)) 
} 

playground

Смежные вопросы