2016-05-02 48 views
12

我有一个时间戳进来,不知道是否有办法将它整合到PST的一天的开始。例如,ts:1305861602对应于2016-04-14, 21:10:27 -0700,但我想将其舍入到映射到2016-04-14 00:00:00 -0700的时间戳。我阅读了时间。时间文档,但没有找到办法做到这一点。Golang:time.Time Round to Day

+1

确实['Time.Truncate'(https://golang.org/pkg/time/#Time.Truncate)不是你想要什么? – JimB

+0

截断是另一种选择,我认为实现起来更麻烦,因为你必须创建一个'持续时间'来表示小时,分钟,秒和纳秒。 – evanmcdonnal

+0

Time.Truncate仅在需要UTC时才有效AFAICT – schimmy

回答

16

执行此操作的简单方法是使用上一个创建新的Time并且只分配年份月份和日期。它看起来像这样;

rounded := time.Date(toRound.Year(), toRound.Month(), toRound.Day(), 0, 0, 0, 0, toRound.Location()) 

这是一个播放示例; https://play.golang.org/p/jnFuZxruKm

7

您可以简单地使用持续时间24 * time.Hour截断时间。

t := time.Date(2015, 4, 2, 0, 15, 30, 918273645, time.UTC) 
d := 24 * time.Hour 
t.Truncate(d) 

https://play.golang.org/p/BTz7wjLTWX

+13

请注意,truncate总是与UTC截断,因此如果您的时区不是UTC,则结果时间在该时区中不会为00:00。 – Guy