2016-05-02 10 views
12

Ich habe einen Zeitstempel kommen, ich frage mich, ob es eine Möglichkeit gibt, es bis zum Beginn eines Tages in PST abzurunden. Zum Beispiel entspricht ts: 13058616022016-04-14, 21:10:27 -0700, aber ich möchte es auf einen Zeitstempel runden, der auf 2016-04-14 00:00:00 -0700 lautet. Ich lese die Zeit durch. Zeitdokument, aber habe keinen Weg gefunden, es zu tun.Golang: time.Time Round to Day

+1

Does [ 'Time.Truncate'] (https://golang.org/pkg/time/#Time.Truncate) nicht tun, was Sie wollen? – JimB

+0

Trunkieren ist eine andere Option, ich denke, es ist mehr ein Schmerz zu implementieren, da Sie eine "Dauer" erstellen müssen, um die Stunden, Minuten, Sekunden und Nanosekunden darzustellen. – evanmcdonnal

+0

Time.Truncate funktioniert nur, wenn Sie möchten UTC, AFAICT – schimmy

Antwort

16

Der einfache Weg, dies zu tun ist, neue Time mit dem vorherigen zu erstellen und nur das Jahr Monat und Tag zuweisen. Es würde so aussehen;

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

Hier ist ein Spielbeispiel; https://play.golang.org/p/jnFuZxruKm

7

Sie können einfach die Dauer 24 * time.Hour verwenden, um die Zeit zu verkürzen.

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

Beachten Sie, dass truncate immer gegen UTC gekürzt wird. Wenn Ihre Zeitzone nicht UTC ist, ist die resultierende Zeit in dieser Zeitzone nicht 00:00. – Guy