webentwicklung-frage-antwort-db.com.de

Wie Unix-Zeitstempel in time.Time analysiert werden

Ich versuche einen Unix timestamp zu parsen, aber ich bekomme den Bereichsfehler. Das ist für mich nicht wirklich sinnvoll, weil das Layout korrekt ist (wie in den Go-Dokumenten):

package main

import "fmt"
import "time"

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

    fmt.Println(tm)
}

Spielplatz

79
hey

Die time.Parse-Funktion führt keine Unix-Zeitstempel aus. Stattdessen können Sie strconv.ParseInt verwenden, um die Zeichenfolge nach int64 zu parsen und den Zeitstempel mit time.Unix zu erstellen:

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)
}

Ausgabe:

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

Spielplatz:http://play.golang.org/p/v_j6UIro7a

Bearbeiten:

Geändert von strconv.Atoi zu strconv.ParseInt, um Int-Überläufe auf 32-Bit-Systemen zu vermeiden.

140
ANisus

sie können time direkt verwenden. Unix-Funktion der Zeit, die den Unix-Zeitstempel in UTC konvertiert 

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)

}

Ausgabe

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

Einige Funktionen teilen, die ich für Termine erstellt habe:

Bitte beachten Sie, dass ich Zeit für einen bestimmten Standort erhalten wollte (nicht nur für die UTC-Zeit). Wenn Sie UTC-Zeit wünschen, entfernen Sie einfach die loc-Variable und den Funktionsaufruf .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

Gemäß der go-Dokumentation gibt Unix eine Ortszeit zurück.

Unix gibt die lokale Zeit zurück, die der angegebenen Unix-Zeit entspricht

Dies bedeutet, dass die Ausgabe von der Maschine abhängt, auf der Ihr Code ausgeführt wird. Dies ist meistens das, was Sie benötigen, aber manchmal möchten Sie den Wert in UTC haben.

Dafür habe ich das snippet angepasst, damit es eine Uhrzeit in UTC zurückgibt:

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

Dies wird auf meinem Computer gedruckt (in MESZ)

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

Überprüfen Sie dieses Repo: https://github.com/araddon/dateparse

Sie können verwenden

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