Lokalisieren des Beginns eines lokalen Tages
Um ein lokales Tagesanfangszeitobjekt abzurufen, besteht ein gängiger Ansatz darin, das zu extrahieren Jahres-, Monats- und Tageskomponenten und rekonstruieren das Datum. Gibt es jedoch eine orthodoxere Funktion, die von der Standardbibliothek bereitgestellt wird?
Das folgende Snippet zeigt eine benutzerdefinierte Bod-Funktion, die diese Aufgabe ausführt:
func Bod(t time.Time) time.Time { year, month, day := t.Date() return time.Date(year, month, day, 0, 0, 0, 0, t.Location()) }
Während die Bod-Funktion das Lokal korrekt bestimmt Ab heute liefert die alternativ vorgeschlagene Truncate-Funktion ein anderes Ergebnis. Um dies zu untersuchen, betrachten Sie den folgenden Code:
chicago, err := time.LoadLocation("America/Chicago") if err != nil { fmt.Println(err) return } now := time.Now().In(chicago) fmt.Println(Bod(now)) fmt.Println(Truncate(now))
Dieser Code generiert die folgende Ausgabe:
2014-08-11 00:00:00 -0400 EDT 2014-08-11 20:00:00 -0400 EDT
Es wird deutlich, dass die Truncate-Methode auf UTC-Zeit arbeitet, während die Bod-Funktion Behält die Ortszeit (Chicago) bei. Darüber hinaus geht Truncate von einem konstanten 24-Stunden-Tag aus, was für Orte wie Chicago, an denen es Schwankungen in der Sommerzeit gibt, ungenau ist.
Das obige ist der detaillierte Inhalt vonWie gelingt der lokale Start in den Tag in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!