2012-11-08 11 views
12

Ho una stringa con millisecondi dall'epoca (proveniva originariamente da una chiamata java.lang.System.currentTimeMillis()). Qual è il modo giusto per convertire questa stringa in una stringa di timestamp leggibile in Go?Come analizzare una stringa timestamp millisecondi-epoca in Go?

Guardare the time package Vedo la funzione Parse, ma i layout sembrano tutti orari normali basati sul fuso orario. Una volta in un oggetto Time, posso usare Format(Time.Stamp) per ottenere l'output desiderato, ma non sono chiaro su come ottenere la stringa in un oggetto Time.

risposta

22

La stringa di formato non supporta i millisecondi dall'epoca, quindi è necessario analizzare manualmente. Per esempio:

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 
} 

Partenza http://play.golang.org/p/M1dWGLT8XE a giocare con l'esempio vivere.

+0

Grazie per la risposta rapida e il collegamento del codice interattivo! –

+0

La tua soluzione funziona, ma sta sfruttando "time.Unix" che soddisfa i valori di nanosecondo dell'intervallo. Stai convertendo millisecondi in nanosecondi, ma ignorando che devi convertire i millisecondi in secondi e in nanosecondi rimanenti. Ecco un adattamento della tua soluzione: http://play.golang.org/p/XKHNPkSqgx. – seh

+3

Perché lavorare di più è più difficile da leggere e potresti sbagliare quando lo stdlib lo ha fatto per te? Dalla documentazione: 'È valido passare nsec al di fuori dell'intervallo [0, 999999999] .' https://golang.org/pkg/time/#Unix –

Problemi correlati