Tengo un código escrito en Go que estoy intentando actualizar para que funcione con las últimas versiones semanales. (Se construyó por última vez bajo r60). Ahora todo está funcionando, excepto el siguiente bit:
if t, _, err := os.Time(); err == nil {
port[5] = int32(t)
}
¿Algún consejo sobre cómo actualizar esto para que funcione con la implementación actual de Go?
Unix()
valor de retorno es de tipoint64
. Truncar elint64
valor de tipo para escribirint32
es un ejemplo del problema del año 2038 .Si lo desea,
string
simplemente conviértalo a través destrconv
:package main import ( "fmt" "strconv" "time" ) func main() { timestamp := strconv.FormatInt(time.Now().UTC().UnixNano(), 10) fmt.Println(timestamp) // prints: 1436773875771421417 }
fuente
Otro consejo.
time.Now().UnixNano()
(godoc) te dará nanosegundos desde la época. No es estrictamente tiempo de Unix, pero te da una precisión inferior a un segundo usando la misma época, lo que puede ser útil.Editar: cambiado para que coincida con la api de golang actual
fuente
time.Now().UnixNano()
( referencia ) sí.Basándose en la idea de otra respuesta aquí, para obtener una interpretación legible por humanos, puede usar:
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 }
Pruébelo en The Go Playground .
fuente