2016-05-02 3 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

Truncate - еще один вариант, я думаю, что это больнее, но вам нужно создать «Duration», чтобы представлять часы, минуты, секунды и наносекунды. – 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