2016-05-02 10 views
12

Ho un timestamp in arrivo, mi chiedo se c'è un modo per arrotondare verso il basso fino all'inizio di un giorno in PST. Ad esempio, ts: 1305861602 corrisponde a 2016-04-14, 21:10:27 -0700, ma voglio arrotondarlo a un timestamp che corrisponde a 2016-04-14 00:00:00 -0700. Ho letto tutto il tempo. Tempo doc ma non ho trovato il modo di farlo.Golang: time.Time Round to Day

+1

fa [ 'Time.Truncate'] (https://golang.org/pkg/time/#Time.Truncate) non ciò che si vuole? – JimB

+0

Truncate è un'altra opzione, penso che sia più difficile da implementare tuttavia perché devi creare un 'Duration' per rappresentare ore, minuti, secondi e nanosecondi. – evanmcdonnal

+0

Time.Truncate funziona solo se si desidera UTC, AFAICT – schimmy

risposta

16

Il modo più semplice per eseguire questa operazione è creare il nuovo Time utilizzando il precedente e assegnando solo l'anno e il giorno. Sembrerebbe questo;

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

ecco un esempio di riproduzione; https://play.golang.org/p/jnFuZxruKm

7

È possibile utilizzare semplicemente la durata 24 * time.Hour per troncare il tempo.

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

Nota che il troncamento tronca sempre rispetto a UTC, quindi se il proprio fuso orario non è UTC, il tempo risultante non sarà 00:00 in quel fuso orario. – Guy