Mam kod napisany w Go, który próbuję zaktualizować, aby działał z najnowszymi cotygodniowymi kompilacjami. (Ostatnio zbudowano go pod r60). Wszystko działa teraz z wyjątkiem następującego bitu:
if t, _, err := os.Time(); err == nil {
port[5] = int32(t)
}
Jakieś porady, jak zaktualizować to, aby działało z obecną implementacją Go?
Unix()
zwracana jest typuint64
. Obcięcieint64
wartości typu do typeint32
to przykład problemu z rokiem 2038 .Jeśli chcesz go
string
po prostu przekonwertować za pomocąstrconv
:package main import ( "fmt" "strconv" "time" ) func main() { timestamp := strconv.FormatInt(time.Now().UTC().UnixNano(), 10) fmt.Println(timestamp) // prints: 1436773875771421417 }
źródło
Kolejna wskazówka.
time.Now().UnixNano()
(godoc) da ci nanosekundy od epoki. Nie jest to ściśle czas uniksowy, ale zapewnia precyzję poniżej sekundy przy użyciu tej samej epoki, co może być przydatne.Edycja: Zmieniono, aby pasował do bieżącego interfejsu API golang
źródło
time.Now().UnixNano()
( odniesienie ) tak.Opierając się na pomyśle z innej odpowiedzi tutaj, aby uzyskać interpretację czytelną dla człowieka, możesz użyć:
package main import ( "fmt" "time" ) func main() { timestamp := time.Unix(time.Now().Unix(), 0) fmt.Printf("%v", timestamp) // prints: 2009-11-10 23:00:00 +0000 UTC }
Wypróbuj w The Go Playground .
źródło