Home > Article > Backend Development > How to Get the Local Start of Day in Go?
Locating the Beginning of a Local Day
To retrieve a local start-of-day time object, a common approach is to extract the year, month, and day components and reconstruct the date. However, is there a more orthodox function provided by the standard library?
The following snippet demonstrates a custom Bod function that performs this task:
func Bod(t time.Time) time.Time { year, month, day := t.Date() return time.Date(year, month, day, 0, 0, 0, 0, t.Location()) }
While the Bod function correctly determines the local start of today, the Truncate function, which is suggested as an alternative, provides a different result. To scrutinize this, consider the following 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))
This code generates the following output:
2014-08-11 00:00:00 -0400 EDT 2014-08-11 20:00:00 -0400 EDT
It becomes evident that the Truncate method operates on UTC time, while the Bod function maintains the local time (Chicago). Furthermore, Truncate assumes a constant 24-hour day, which is inaccurate for locations like Chicago that experience daylight saving time variations.
The above is the detailed content of How to Get the Local Start of Day in Go?. For more information, please follow other related articles on the PHP Chinese website!