Fragment Description:



Time and Duration.
Go's offers extensive support for times and durations; here are some examples.


timeAndDuration

Go Playground

Last update, on 2015, Fri 9 Oct, 16:55:23

/* ... <== see fragment description ... */

package main

import "fmt"
import "time"

func main() {
    p := fmt.Println
    // We'll start by getting the current time.
    now := time.Now()
    p("time.Now(): ", now)
    // You can build a "time" struct by providing the
    // year, month, day, etc. Times are always associated
    // with a "Location", i.e. time zone.
    then := time.Date(2009, 11, 17, 20, 34, 58, 651387237, time.UTC)
    p("time.Date(): ", then)
    p("==================================")
    // You can extract the various components of the time
    // value as expected.
    p("time.Date().Year(): ", then.Year())
    p("time.Date().Month(): ", then.Month())
    p("time.Date().Day(): ", then.Day())
    p("time.Date().Hour(): ", then.Hour())
    p("time.Date().Minute(): ", then.Minute())
    p("time.Date().Second(): ", then.Second())
    p("time.Date().Nanosecond(): ", then.Nanosecond())
    p("time.Date().Location(): ", then.Location())
    // The Monday-Sunday "Weekday" is also available.
    p("time.Date().Weekday(): ", then.Weekday())
    p("==================================")
    // These methods compare two times, testing if the
    // first occurs before, after, or at the same time
    // as the second, respectively.
    p("time.Date().Before(now): ", then.Before(now))
    p("time.Date().After(now): ", then.After(now))
    p("time.Date().Equal(now): ", then.Equal(now))
    p("==================================")
    // The "Sub" methods returns a "Duration" representing
    // the interval between two times.
    diff := now.Sub(then)
    p("time.Now().Sub(time.Date()): ", diff)
    p("==================================")
    // We can compute the length of the duration in
    // various units.
    p("time.Date().Sub(then).Hours(): ", diff.Hours())
    p("time.Date().Sub(then).Minutes(): ", diff.Minutes())
    p("time.Date().Sub(then).Seconds(): ", diff.Seconds())
    p("time.Date().Sub(then).Nanoseconds(): ", diff.Nanoseconds())
    p("==================================")
    // You can use "Add" to advance a time by a given
    // duration, or with a "-" to move backwards by a
    // duration.
    p("time.Date().Sub(now).Add(now.Sub(then)): ", now.Add(diff))
    p("time.Date().Sub(then).Add(-(now.Sub(then))): ", then.Add(-diff))
}

/* Expected Output:
time.Now():  2015-09-15 19:21:13.8955623 +0100 BST
time.Date():  2009-11-17 20:34:58.651387237 +0000 UTC
==================================
time.Date().Year():  2009
time.Date().Month():  November
time.Date().Day():  17
time.Date().Hour():  20
time.Date().Minute():  34
time.Date().Second():  58
time.Date().Nanosecond():  651387237
time.Date().Location():  UTC
time.Date().Weekday():  Tuesday
==================================
time.Date().Before(now):  true
time.Date().After(now):  false
time.Date().Equal(now):  false
==================================
time.Now().Sub(time.Date()):  51069h46m15.244175063s
==================================
time.Date().Sub(then).Hours():  51069.77090115974
time.Date().Sub(then).Minutes():  3.0641862540695844e+06
time.Date().Sub(then).Seconds():  1.8385117524417508e+08
time.Date().Sub(then).Nanoseconds():  183851175244175063
==================================
time.Date().Sub(now).Add(now.Sub(then)):  2021-07-13 17:07:29.139737363 +0100 BST
time.Date().Sub(then).Add(-(now.Sub(then))):  2004-01-20 22:48:43.407212174 +0000 UTC
*/



Comments