2017-04-15 1 views
0

Ich lese eine JSON-Datei, die Unix-Epoch Daten enthält, aber sie sind Zeichenfolgen in der JSON. Kann ich in Go eine Zeichenfolge in der Form "1490846400" in eine Go time.Time umwandeln?Konvertieren Sie Unix-Epoche als eine Zeichenfolge zu time.Time on Go

+3

Mögliches Duplikat (http://stackoverflow.com/questions/24987131/how-to-parse-unix-timestamp-in-golang) [Wie Unix-Zeitstempel in golang analysieren] – Laurence

Antwort

1

Es gibt keine solche Funktion in time Paket, aber es ist einfach zu schreiben:

func stringToTime(s string) (time.Time, error) { 
    sec, err := strconv.ParseInt(s, 10, 64) 
    if err != nil { 
     return time.Time{}, err 
    } 
    return time.Unix(sec, 0), nil 
} 

Spielplatz: https://play.golang.org/p/2h0Vd7plgk.

2

Es ist nichts falsch oder falsch über die Antwort zur Verfügung gestellt von @ Ainar-G, aber wahrscheinlich einen besseren Weg, dies zu tun ist mit einem benutzerdefinierten JSON Unmarshaler:

type EpochTime time.Time 

func (et *EpochTime) UnmarshalJSON(data []byte) error { 
    t := string.Trim(string(data), `"`) // Remove quote marks from around the JSON string 
    sec, err := strconv.ParseInt(t, 10, 64) 
    if err != nil { 
     return err 
    } 
    epochTime := time.Unix(sec,0) 
    *et = epochTime 
    return nil 
} 

Dann in Ihrer Struktur, ersetzen time.Time mit EpochTime:

type SomeDocument struct { 
    Timestamp EpochTime `json:"time"` 
    // other fields 
} 
Verwandte Themen