2012-11-08 9 views
12

Mam ciąg znaków z milisekundami od epoki (pochodzi on z połączenia java.lang.System.currentTimeMillis()). Jaki jest właściwy sposób przekonwertowania tego ciągu znaków na czytelny dla człowieka ciąg znaków czasowych w Go?Jak analizować ciąg znaków czasu milisekundy-od-epoki w programie Go?

Patrząc na the time package Widzę funkcję Parse, ale wszystkie układy wyglądają jak normalne czasy w strefie czasowej. Raz do obiektu czasu, mogę użyć Format(Time.Stamp), aby uzyskać wyjście, które chcę, ale nie jestem jasne, jak uzyskać ciąg do obiektu czasu.

Odpowiedz

22

Łańcuch formatu nie obsługuje milisekund od epoki, więc należy parsować ręcznie. Na przykład:

func msToTime(ms string) (time.Time, error) { 
    msInt, err := strconv.ParseInt(ms, 10, 64) 
    if err != nil { 
     return time.Time{}, err 
    } 

    return time.Unix(0, msInt*int64(time.Millisecond)), nil 
} 

Wyjazd http://play.golang.org/p/M1dWGLT8XE grać z przykładu żyją.

+0

Dzięki za szybką odpowiedź i interaktywny link do kodu! –

+0

Twoje rozwiązanie działa, ale korzysta z funkcji 'time.Unix' uwzględniającej nanosekundowe wartości zakresu. Konwertujesz milisekundy do nanosekund, ale ignorujesz, że powinieneś przekonwertować milisekundy na sekundy i pozostać nanosekundy. Oto adaptacja twojego rozwiązania: http://play.golang.org/p/XKHNPkSqgx. – seh

+3

Dlaczego więcej pracy trudniej jest odczytać i możesz się pomylić, gdy stdlib zrobi to za Ciebie? Z dokumentów: 'Ważne jest, aby przekazać nsec poza zakresem [0, 999999999]. Https://golang.org/pkg/time/#Unix –

Powiązane problemy