为了获取今天时间对象的本地开始时间,我提取了YMD并重建了新的日期。看起来像是在跳动。我还会错过其他一些标准库功能吗?
代码也可以在http://play.golang.org/p/OSRl0nxyB7上运行:
func Bod(t time.Time) time.Time { year, month, day := t.Date() return time.Date(year, month, day, 0, 0, 0, 0, t.Location()) } func main() { fmt.Println(Bod(time.Now())) }
问题的标题和正文都要求“今天开始是当地的(芝加哥)”。问题中的Bod函数正确地做到了这一点。接受Truncate功能的权利要求是更好的解决方案,但它返回一个不同的结果; 它不会在今天开始返回本地[芝加哥]。例如,
Bod
Truncate
package main import ( "fmt" "time" ) func Bod(t time.Time) time.Time { year, month, day := t.Date() return time.Date(year, month, day, 0, 0, 0, 0, t.Location()) } func Truncate(t time.Time) time.Time { return t.Truncate(24 * time.Hour) } func main() { 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
该time.Truncate方法将截断UTC时间。
time.Truncate
在接受Truncate功能还假设有一天24小时。芝加哥每天有23、24或25个小时。