Aktuelle Zeit als formatierte Zeichenfolge in Go?

131

Was ist der beste Weg, um den aktuellen Zeitstempel in Go abzurufen und in einen String zu konvertieren? Ich brauche sowohl Datum als auch Uhrzeit in z. JJJJMMTThhmmss Format.

brianoh
quelle
1
Dies ist alles, was Sie brauchen golangprograms.com/…
Eduardo A. Fernández Díaz

Antworten:

149

Verwenden Sie die time.Now()Funktion und die time.Format()Methode.

t := time.Now()
fmt.Println(t.Format("20060102150405"))

druckt aus 20110504111515, oder zumindest vor ein paar Minuten. (Ich bin auf Eastern Daylight Time.) In den im Zeitpaket definierten Konstanten gibt es mehrere vordefinierte Zeitformate.

Sie können verwenden, time.Now().UTC()wenn Sie lieber UTC als Ihre lokale Zeitzone haben möchten.

nmichaels
quelle
15
Ich mag definitiv die KitchenKonstante ( = "3:04PM")
tux21b
5
Danke für diese Info. Woher weiß das Zeitpaket aus der Übergabe von "20060102150405" genau das, was wir übergeben, da es keine der vordefinierten Konstanten im Zeitpaket ist? Welche Bedeutung hat dieses Datum und diese Uhrzeit im Zeitpaket (20060102150405)? Es scheint mir ein bisschen schrullig zu sein, aber solange es funktioniert, spielt es vermutlich keine Rolle, solange wir beim Codieren keinen Fehler machen. Ich denke, sie hielten es nicht für angebracht, eine Konstante für dieses Format bereitzustellen und mit dem Zeichenfolgenmuster übereinzustimmen.
Brianoh
9
@brianoh: Siehe golang.org/pkg/time/#Constants Es ist die Zeit "01/02 03:04:05 PM '06 -0700", da jede Komponente eine andere Nummer hat (1, 2, 3 usw.). Es kann anhand der Zahlen bestimmen, welche Komponenten Sie möchten.
Newacct
1
Bitte beachten Sie, dass time.LocalTime () nicht mehr existiert: siehe meine Antwort unten, um Go 1.0.3-kompatibel zu sein
Deleplace
71

Alle anderen Antworten sind für jemanden, der von Google kommt und nach "timestamp in go" sucht, sehr falsch! YYYYMMDDhhmmss ist kein "Zeitstempel".

Um den "Zeitstempel" eines Datums zu erhalten (Anzahl der Sekunden ab Januar 1970), lautet die korrekte Funktion .Unix () und gibt wirklich eine Ganzzahl zurück

Bactisme
quelle
8
Genau; Die Frage sollte "aktuelles Datum" und nicht "aktueller Zeitstempel" heißen
Developerbmw
1
Obwohl es spät ist, denke ich, dass .Unix () auf golang.org/pkg/time/#Time.Unix verweisen sollte, dessen Rückgabetyp int64 ist.
geboren
Obwohl Sie technisch korrekt sind, denke ich, dass viele Programmierer heutzutage den Zeitstempel mit "Die aktuelle Zeit in einer Art formatierter Weise" in Verbindung bringen, sodass dieser Titel für die meisten gleichermaßen verwirrend wäre.
Roger Hill
Ich habe eine Bearbeitung vorgeschlagen - Get current time as formatted string in Go?. Hoffentlich wird es jemand genehmigen.
Akki
56

Verwenden Sie zur besseren Lesbarkeit am besten die RFC-Konstanten im Zeitpaket (ich denke)

import "fmt" 
import "time"

func main() {
    fmt.Println(time.Now().Format(time.RFC850))
}
matthewmcneely
quelle
4
Wie erzeugt dies JJJJMMTThhmmss?
Rod
2
RFC850 produziert Tuesday, 10-Nov-09 23:00:00 UTC RFC3339 = "2006-01-02T15:04:05Z07:00" play.golang.org/p/XmobwWSz5pN golang.org/pkg/time
Chris McKee
32

Verwenden Sie die Funktionen time.Now () und time.Format () (da time.LocalTime () ab Go 1.0.3 nicht mehr vorhanden ist).

t := time.Now()
fmt.Println(t.Format("20060102150405"))

Online-Demo (mit Datum in der Vergangenheit auf dem Spielplatz festgelegt, egal)

Deleplace
quelle
6
Und Sie können es einfach als Zeichenfolge wie diese verwenden:s := "Actual time is: "+time.Now().String()
Michael
2

Als Echo auf die Antwort von @ Bactisme lautet die Vorgehensweise zum Abrufen des aktuellen Zeitstempels (z. B. in Millisekunden):

msec := time.Now().UnixNano() / 1000000

Ressource: https://gobyexample.com/epoch

Jack Ryan
quelle
0

https://golang.org/src/time/format.go angegeben Für die Analyse wird die Zeit 15für Stunden verwendet, 04wird für Minuten verwendet,05 für Sekunden verwendet.

Für Datum Parsen 11, Jan, Januaryist seit Monaten 02, Mon, Mondayfür Tag des Monats, 2006des Jahres und natürlichMST für die Zone

Sie können aber auch dieses Layout verwenden, was ich sehr einfach finde. "Mon Jan 2 15:04:05 MST 2006"

    const layout = "Mon Jan 2 15:04:05 MST 2006"
    userTimeString := "Fri Dec 6 13:05:05 CET 2019"

    t, _ := time.Parse(layout, userTimeString)
    fmt.Println("Server: ", t.Format(time.RFC850))
    //Server:  Friday, 06-Dec-19 13:05:05 CET

    mumbai, _ := time.LoadLocation("Asia/Kolkata")
    mumbaiTime := t.In(mumbai)
    fmt.Println("Mumbai: ", mumbaiTime.Format(time.RFC850))
    //Mumbai:  Friday, 06-Dec-19 18:35:05 IST

DEMO

STAHL
quelle
-4

Um die genaue Frage zu beantworten:

import "github.com/golang/protobuf/ptypes"

Timestamp, _ = ptypes.TimestampProto(time.Now())
suran
quelle
Danke Suran, dies ist nützlich, wenn der Zeitstempel am
15.