2014-12-29 33 views
12

Come posso calcolare il numero di giorni tra due date? Nel codice seguente dovrei ottenere il numero di ore, il che significa che dovrei solo dividere per 24. Tuttavia, il risultato che ottengo è qualcosa come -44929.000000. Sto solo guardando un giorno o due indietro così mi aspetterei 24 o 48 ore.Calcola il numero di giorni tra due date?

package main 

import (
    "fmt" 
    "time" 
) 

func main() { 
    timeFormat := "2006-01-02" 

    t, _ := time.Parse(timeFormat, "2014-12-28") 
    fmt.Println(t) 
    // duration := time.Since(t) 
    duration := time.Now().Sub(t) 
    fmt.Printf("%f", duration.Hours()) 
} 

Ecco il codice eseguibile Go: http://play.golang.org/p/1MV6wnLVKh

risposta

10

vostro programma sembra funzionare come previsto. Ho 45,55 ore. Hai provato a eseguirlo localmente?

Il tempo del campo da giuoco è fisso, time.Now() vi darà sempre il 2009-11-10 23:00:00 +0000 UTC.

+1

Ouch. Lo sapevo. Non ho usato Go per un po '. Grazie. – h4labs

+0

Questo dà ancora il risultato sbagliato quando si verificano cambiamenti dell'ora legale. a [Durata] (http://golang.org/pkg/time/#Duration) rappresenta solo il tempo trascorso tra due istanti come un conteggio int64 nanosecondo. Non può essere utilizzato direttamente per calcolare giorni senza errori due volte l'anno. Sospiro. –

4
package main 

import (
    "fmt" 
    "time" 
) 

func main() { 

    date := time.Now() 
    fmt.Println(date) 

    format := "2006-01-02 15:04:05" 
    then,_ := time.Parse(format, "2007-09-18 11:58:06") 
    fmt.Println(then) 

    diff := date.Sub(then) 

    //func Since(t Time) Duration 
    //Since returns the time elapsed since t. 
    //It is shorthand for time.Now().Sub(t). 

    fmt.Println(diff.Hours())// number of Hours 
    fmt.Println(diff.Nanoseconds())// number of Nanoseconds 
    fmt.Println(diff.Minutes())// number of Minutes 
    fmt.Println(diff.Seconds())// number of Seconds 

    fmt.Println(int(diff.Hours()/24))// number of days  

} 

Ecco il codice in esecuzione https://play.golang.org/p/Vbhh1cBKnh

Problemi correlati