获取自时区昨晚午夜以来的持续时间

wit*_*221 0 time go

我想获取某个时区自去年午夜以来的持续时间。

我已经尝试过以下方法:

estLocation, _ := time.LoadLocation("America/New_York")
nowEST := time.Now().In(estLocation)
midnightEST := nowEST.Truncate(24 * time.Hour)
diff := time.Since(midnightEST)

Run Code Online (Sandbox Code Playgroud)

以及使用Round代替Truncate.

但是,这只会将时钟拨回 24 小时,而不是返回 EST 的午夜。

如何实现这一目标?

小智 5

通过从日期构造时间来获取午夜时间:

loc, _ := time.LoadLocation("America/New_York")
now := time.Now().In(loc)
midnight := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, loc)
Run Code Online (Sandbox Code Playgroud)

从现在开始减去午夜即可得到持续时间:

d := now.Sub(midnight)
Run Code Online (Sandbox Code Playgroud)

在操场上运行它。请注意,time.Now() 是 Playground 上的常量值。