定位本地一天的开始
要检索本地一天开始时间对象,常见的方法是提取年、月、日组件并重建日期。但是,标准库是否提供了更正统的函数?
以下代码片段演示了执行此任务的自定义 Bod 函数:
func Bod(t time.Time) time.Time { year, month, day := t.Date() return time.Date(year, month, day, 0, 0, 0, 0, t.Location()) }
虽然 Bod 函数正确确定了本地从今天开始,建议作为替代方案的 Truncate 函数提供了不同的结果。要仔细检查这一点,请考虑以下代码:
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))
此代码生成以下输出:
2014-08-11 00:00:00 -0400 EDT 2014-08-11 20:00:00 -0400 EDT
很明显,Truncate 方法在 UTC 时间上运行,而 Bod 函数在 UTC 时间上运行保持当地时间(芝加哥)。此外,Truncate 假定一天 24 小时不变,这对于像芝加哥这样经历夏令时变化的地区来说是不准确的。
以上是如何在 Go 中获取本地一天的开始?的详细内容。更多信息请关注PHP中文网其他相关文章!