Go-Unix-Timestamp-Snippets
Go-Beispiele für Unix-Sekunden, -Millisekunden und -Nanosekunden, das Umwandeln von Timestamps in time.Time und das Formatieren mit RFC3339 oder eigenen Layouts.
package main
import "time"
func main() {
ts := time.Now().Unix()
}time.Now().UnixMilli()time.Now().UnixNano()import "time"
t := time.Unix(1700000000, 0)
t.UTC() // ensure UTCimport "time"
t := time.Unix(1700000000, 0)
t.Format(time.RFC3339) // "2023-11-15T06:13:20Z"
t.Format("2006-01-02 15:04:05") // custom layoutimport "time"
t, _ := time.Parse(time.RFC3339, "2023-11-15T06:13:20Z")
t.Unix()Grundlagen zu Go-Zeitstempeln
Gos time-Paket bietet direkte Helfer für Unix-Sekunden, -Millisekunden und -Nanosekunden. Verwende time.Now().Unix() für Sekunden und time.Now().UnixMilli() für JavaScript-kompatible Millisekunden.
time.Time-Werte formatieren
Verwende time.Unix(seconds, 0), um aus Unix-Sekunden ein time.Time zu erstellen, und rufe dann UTC() auf, wenn du deterministische Ausgabe möchtest. RFC3339 ist meist das beste String-Format für API-Antworten.
Hinweise für den Produktiveinsatz von Go
Gos time.Time trägt eine Location, aber Unix-Zeitstempel stellen immer einen einzigen UTC-Zeitpunkt dar. Normalisiere Zeitstempel an API- und Datenbankgrenzen und formatiere dann mit einer expliziten Location, wenn ein Nutzer oder eine Geschäftsregel lokale Zeit benötigt. Das hält Vergleiche einfach und verhindert, dass lokale Servereinstellungen die Ausgabe verändern.
- Verwende time.Now().Unix() für Unix-Sekunden in Logs, Queues und Datenbankfeldern
- Verwende time.Now().UnixMilli() für JavaScript-kompatible Werte
- Verwende time.Unix(seconds, 0).UTC() vor dem Formatieren deterministischer Strings
- Verwende time.RFC3339 oder time.RFC3339Nano für API-Antworten
FAQ
- Sollte ich time.Time oder Unix-Sekunden speichern?
- Verwende time.Time innerhalb von Go, wenn du Kalenderoperationen brauchst. Speichere Unix-Sekunden oder einen Datenbank-Zeitstempeltyp, wenn der Wert indiziert, abgefragt oder mit anderen Systemen geteilt werden muss.
- Welche Einheit erwartet time.Unix?
- time.Unix erwartet Sekunden und Nanosekunden als separate Argumente. Wenn du Millisekunden erhältst, teile oder wandle den Wert um, bevor du time.Unix aufrufst.
- Wie überprüfe ich die Go-Ausgabe?
- Formatiere den Wert mit t.UTC().Format(time.RFC3339) und vergleiche ihn mit dem Zeitstempel, den die API, die Queue oder die Datenbankspalte erwartet, in die du schreibst.