go - playground - Cómo analizar la marca de tiempo de Unix a tiempo.
golang time difference (5)
puede usar el tiempo directamente. Desvincular la función de tiempo que convierte la marca de tiempo de Unix a UTC
package main
import (
"fmt"
"time"
)
func main() {
unixTimeUTC:=time.Unix(1405544146, 0) //gives unix time stamp in utc
unitTimeInRFC3339 :=unixTimeUTC.Format(time.RFC3339) // converts utc time to RFC3339 format
fmt.Println("unix time stamp in UTC :--->",unixTimeUTC)
fmt.Println("unix time stamp in unitTimeInRFC3339 format :->",unitTimeInRFC3339)
}
Salida
unix time stamp in UTC :---> 2014-07-16 20:55:46 +0000 UTC
unix time stamp in unitTimeInRFC3339 format :----> 2014-07-16T20:55:46Z
check in Go Playground: https://play.golang.org/p/5FtRdnkxAd
Estoy tratando de analizar una timestamp Unix, pero salgo del error de rango. Eso realmente no tiene sentido para mí, porque el diseño es correcto (como en los documentos Go):
package main
import "fmt"
import "time"
func main() {
tm, err := time.Parse("1136239445", "1405544146")
if err != nil{
panic(err)
}
fmt.Println(tm)
}
Compartiendo algunas funciones que creé para las fechas:
Tenga en cuenta que quería obtener tiempo para una ubicación en particular (no solo la hora UTC). Si desea la hora UTC, simplemente elimine la variable loc y la llamada a la función .In (loc).
func GetTimeStamp() string {
loc, _ := time.LoadLocation("America/Los_Angeles")
t := time.Now().In(loc)
return t.Format("20060102150405")
}
func GetTodaysDate() string {
loc, _ := time.LoadLocation("America/Los_Angeles")
current_time := time.Now().In(loc)
return current_time.Format("2006-01-02")
}
func GetTodaysDateTime() string {
loc, _ := time.LoadLocation("America/Los_Angeles")
current_time := time.Now().In(loc)
return current_time.Format("2006-01-02 15:04:05")
}
func GetTodaysDateTimeFormatted() string {
loc, _ := time.LoadLocation("America/Los_Angeles")
current_time := time.Now().In(loc)
return current_time.Format("Jan 2, 2006 at 3:04 PM")
}
func GetTimeStampFromDate(dtformat string) string {
form := "Jan 2, 2006 at 3:04 PM"
t2, _ := time.Parse(form, dtformat)
return t2.Format("20060102150405")
}
La función time.Parse
no hace marcas de tiempo Unix. En su lugar, puede usar strconv.ParseInt
para analizar la cadena a int64
y crear la marca de tiempo con time.Unix
:
package main
import (
"fmt"
"time"
"strconv"
)
func main() {
i, err := strconv.ParseInt("1405544146", 10, 64)
if err != nil {
panic(err)
}
tm := time.Unix(i, 0)
fmt.Println(tm)
}
Salida:
2014-07-16 20:55:46 +0000 UTC
Área de juegos: http://play.golang.org/p/v_j6UIro7a
Editar:
Se cambió de strconv.Atoi
a strconv.ParseInt
para evitar desbordamientos int en sistemas de 32 bits.
Solo usa el time.Parse
ejemplo:
package main
import (
"fmt"
"time"
)
func main() {
fromString := "Wed, 6 Sep 2017 10:43:01 +0300"
t, e := time.Parse("Mon, _2 Jan 2006 15:04:05 -0700", fromString)
if e != nil {
fmt.Printf("err: %s/n", e)
}
fmt.Printf("UTC time: %v/n", t.UTC())
}
Ejemplo de trabajo en play.golang.org .
Verifique este repositorio: https://github.com/araddon/dateparse
Puedes usar
t, err := dateparse.ParseAny(timestampString)