一尘不染

返回本地开始时间对象

go

为了获取今天时间对象的本地开始时间,我提取了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()))
}

阅读 201

收藏
2020-07-02

共1个答案

一尘不染

问题的标题和正文都要求“今天开始是当地的(芝加哥)”。问题中的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时间。

在接受Truncate功能还假设有一天24小时。芝加哥每天有23、24或25个小时。

2020-07-02