web-dev-qa-db-fra.com

Comment analyser l'horodatage Unix en time.Time

J'essaye d'analyser un Unix timestamp mais je tombe en erreur. Cela n'a pas vraiment de sens pour moi, car la disposition est correcte (comme dans la documentation Go):

package main

import "fmt"
import "time"

func main() {
    tm, err := time.Parse("1136239445", "1405544146")
    if err != nil{
        panic(err)
    }

    fmt.Println(tm)
}

Cour de récréation

79
hey

La fonction time.Parse ne fait pas les horodatages Unix. À la place, vous pouvez utiliser strconv.ParseInt pour analyser la chaîne avec int64 et créer l’horodatage avec 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)
}

Sortie:

2014-07-16 20:55:46 +0000 UTC

Aire de jeux:http://play.golang.org/p/v_j6UIro7a

Modifier:

Changé de strconv.Atoi à strconv.ParseInt pour éviter les débordements int sur les systèmes 32 bits.

140
ANisus

vous pouvez directement utiliser time.Unix fonction de l'heure qui convertit l'horodatage Unix en 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)

}

Sortie

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

4
negi Yogi

Partage de quelques fonctions que j'ai créées pour les dates:

Veuillez noter que je voulais avoir du temps pour un endroit particulier (pas seulement l'heure UTC). Si vous voulez l'heure UTC, supprimez simplement la variable loc et l'appel de la fonction .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")
}
2
Adi

Selon la documentation de go , Unix renvoie une heure locale.

Unix renvoie l'heure locale correspondant à l'heure Unix donnée

Cela signifie que la sortie dépend de la machine sur laquelle votre code est exécuté, ce qui est le plus souvent votre besoin, mais vous souhaiterez parfois avoir la valeur en UTC.

Pour ce faire, j’ai adapté l’extrait extrait afin qu’il renvoie une heure au format UTC:

i, err := strconv.ParseInt("1405544146", 10, 64)
if err != nil {
    panic(err)
}
tm := time.Unix(i, 0)
fmt.Println(tm.UTC())

Cela imprime sur ma machine (en CEST)

2014-07-16 20:55:46 +0000 UTC
0
Thib-o

Vérifiez ce dépôt: https://github.com/araddon/dateparse

Vous pouvez utiliser

t, err := dateparse.ParseAny(timestampString)
0
Rujoota Shah