Datumsbereich nach Wochennummer in Golang
Beheben von Abweichungen bei der Wochennummer
Die Uhrzeit. Die Funktion ISOWeek() in der Go-Standardbibliothek gibt die ISO-Wochennummer zurück, die am Montag beginnt. Es scheint jedoch, dass Sie Wochennummern benötigen, die auf einem Startdatum am Sonntag basieren.
Benutzerdefiniertes Dienstprogramm
Um dieses Problem zu beheben, verwenden wir eine benutzerdefinierte Dienstprogrammfunktion, um das gewünschte zu erhalten Datumsbereich:
import "time" func WeekStart(year, week int) time.Time { // Align to first day of the week (Sunday) and correct week number t := time.Date(year, time.July, 1, 0, 0, 0, 0, time.UTC) if wd := t.Weekday(); wd == time.Sunday { t = t.AddDate(0, 0, -6) } else { t = t.AddDate(0, 0, -int(wd)+1) } t = t.AddDate(0, 0, (week-1)*7) return t }
Wochenbereich
Wenn Sie sowohl den Anfang als auch das Ende benötigen Daten für die angegebene Woche können Sie die folgende Funktion verwenden:
func WeekRange(year, week int) (start, end time.Time) { start = WeekStart(year, week) end = start.AddDate(0, 0, 6) return }
Beispielausgabe
fmt.Println(WeekRange(2018, 1)) fmt.Println(WeekRange(2018, 52))
Ausgabe
2018-01-01 00:00:00 +0000 UTC 2018-01-07 00:00:00 +0000 UTC 2018-12-24 00:00:00 +0000 UTC 2018-12-30 00:00:00 +0000 UTC
Hinweis: Diese Methode behandelt Wochen außerhalb des Bereichs, indem sie 0 als letzte Woche interpretiert des Vorjahres, -1 als vorletzte Woche des Vorjahres usw.
Das obige ist der detaillierte Inhalt vonWie erhalte ich in Go einen Datumsbereich basierend auf der Wochennummer?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!