Time Durations in Golang

10 Sep, 2021
Operations related to time and date are a crucial part of software development (example log keeping). Go standard library provides a time package that has many functions and methods to deal with date and time. The operating system measures two types of time “Wall clock” time and “Monotonic” time. Wall clock time is used to tell time whereas monotonic clock time is used to measure time. Go time package provides functionalities to measure and manipulate both clocks. Golang has time.Time datatype to deal with wall clock time and time.Duration to deal with monotonic time. The first basic method is time.Now() which returns the current date and time up to nanosecond precision. The value returned has datatype time.Time, which is a struct. According to Golang’s official documentation “A Time represents an instant in time with nanosecond precision.” 
Go
package main import (    "fmt"    "time") func main() {     // Returns current time.    t := time.Now()    fmt.Println(t)}
Output:
2020-04-29 00:37:36.849599502 +0530 IST m=+0.000166550 
In Go any variable which is declared but not initialized is by default set to its zero value. The zero value of type Time is January 1, year 1, 00:00:00.000000000 UTC, which is impossible in a real-life scenario. IsZero method can also be used to check whether a Time variable is initialized or not. 
Go
package main import (    "fmt"    "time") func main() {    var t time.Time    fmt.Println(t)    fmt.Println(t.IsZero())}
Output:
0001-01-01 00:00:00 +0000 UTC 
true 
time.Time datatype has a base type structure that contains time, date, location, timezone, and monotonic time. Go time package has methods to extract individual parts from time instant (like date, time, day, location, etc). 
Go
package main import (    "fmt"    "time") func main() {     t := time.Now()    fmt.Println(t)     // We can get individual values    // of hour, minute, seconds,    // nanoseconds from time.Time    // datatype     // Returns wall clock time    // from time.Time datatype    fmt.Println(t.Clock())    fmt.Println(t.Hour())    fmt.Println(t.Minute())    fmt.Println(t.Second())    fmt.Println(t.Nanosecond())     fmt.Println("---------------------------------")     // We can get individual values    // of day, month, year, yearday,    // and weekday from time.Time    // datatype     // Returns date from    // time.Time datatype    fmt.Println(t.Date())    fmt.Println(t.Day())    fmt.Println(t.Month())    fmt.Println(t.Year())    fmt.Println(t.YearDay())    fmt.Println(t.Weekday())     // week number    fmt.Println(t.ISOWeek())     fmt.Println("---------------------------------")     // current time in string formats    fmt.Println(t.String())     // nanoseconds passed    // from 1 january 1970    fmt.Println(t.Unix())     // prints abbreviated timezone and    // its offset in seconds from    // east of UTC    fmt.Println(t.Zone())     // prints nanoseconds    // elapsed from 1 january 1970    fmt.Println(t.UnixNano())}
Output:
2020-04-29 17:54:25.643755713 +0530 IST m=+0.000064065
17 54 25
17
54
25
643755713
---------------------------------
2020 April 29
29
April
2020
120
Wednesday
2020 18
---------------------------------
2020-04-29 17:54:25.643755713 +0530 IST m=+0.000064065
1588163065
IST 19800
1588163065643755713
Golang == operator compares not only time instant but also the Location and the monotonic clock reading.
time.Duration has a base type int64. Duration represents the elapsed time between two instants as an int64 nanosecond count”. The maximum possible nanosecond representation is up to 290 years. 
type Duration int64
Conversion of various duration instances: 
const (
    Nanosecond  Duration = 1
    Microsecond          = 1000 * Nanosecond
    Millisecond          = 1000 * Microsecond
    Second               = 1000 * Millisecond
    Minute               = 60 * Second
    Hour                 = 60 * Minute
)
Go
package main import (    "fmt"    "time") func main() {     // random duration in nanoseconds    var d time.Duration = 1000000000     // converts d in hour    fmt.Println(d.Hours())     // converts d in minutes    fmt.Println(d.Minutes())     // converts d in seconds    fmt.Println(d.Seconds())     // converts d in milliseconds    fmt.Println(d.Milliseconds())     // converts d in microseconds    fmt.Println(d.Microseconds())     // string representation go d    fmt.Println(d.String())}
Output:
0.0002777777777777778
0.016666666666666666
1
1000
1000000
1s
 
simranarora5sos
GoLang-time
Picked
Go Language
Write From Home
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.