Go Package time: Difference between revisions

From NovaOrdis Knowledge Base
Jump to navigation Jump to search
 
(5 intermediate revisions by the same user not shown)
Line 9: Line 9:


* <code>[https://golang.org/pkg/time/#After time.After]</code> returns a channel that after the given duration, will send current time on it. This can be used to implement a timeout with <code>[[Go Channels#select|select]]</code>.
* <code>[https://golang.org/pkg/time/#After time.After]</code> returns a channel that after the given duration, will send current time on it. This can be used to implement a timeout with <code>[[Go Channels#select|select]]</code>.
=Creating Time Instances=
<font color=darkkhaki>
* Understand representation
* time.Now()
* time.Parse(time.RFC822, "01 Jan 00 00:00 UTC")
* time.Unix()
* time.UnixMicro()
* time.UnixMilli()
</font>


==<tt>time.Sleep()</tt>==
==<tt>time.Sleep()</tt>==
Line 46: Line 57:
=<tt>Duration</tt>=
=<tt>Duration</tt>=
The duration can be specified as "ns", "us" (or "µs"), "ms", "s", "m", "h".
The duration can be specified as "ns", "us" (or "µs"), "ms", "s", "m", "h".
Compute elapsed time (duration):
<syntaxhighlight lang='go'>
t0 := time.Now()
duration := time.Now().Sub(t0) // in milliseconds
</syntaxhighlight>


=<tt>Ticker</tt>=
=<tt>Ticker</tt>=
Line 61: Line 78:
<font color=darkkhaki>
<font color=darkkhaki>
TODO:
TODO:
</font>
<syntaxhighlight lang='go'>
<syntaxhighlight lang='go'>
time.Now().Format("03:04 AM")
time.Now().Format("03:04 AM")
</syntaxhighlight>
</syntaxhighlight>
</font>
 
 
<syntaxhighlight lang='go'>
time.Now().Format(time.RFC822)
</syntaxhighlight>
 
Predefined layouts:
 
* <code>time.ANSIC</code>
* <code>time.UnixDate</code>
* <code>time.RFC822</code>
* <code>time.RFC822Z</code>
* <code>time.RFC850</code>
* <code>time.RFC1123</code>
* <code>time.RFC1123Z</code>
* <code>time.RFC3339</code>
* <code>time.RFC3339Nano</code>
* <code>time.Kitchen</code>
* <code>time.Stamp</code>
* <code>time.StampMilli</code>
* <code>time.StampMicro</code>
* <code>time.StampNano</code>
* <code>time.DateTime</code> "2006-01-02 15:04:05"
* <code>time.DateOnly</code> "2006-01-02"
* <code>time.TimeOnly</code> "15:04:05"
 
=Idioms=
=Idioms=


Line 72: Line 115:
   fmt.Printf(".\n")
   fmt.Printf(".\n")
}
}
</syntaxhighlight>
==Timestamp==
<syntaxhighlight lang='go'>
timestamp := time.Now().Unix()
</syntaxhighlight>
</syntaxhighlight>

Latest revision as of 00:14, 9 August 2024

External

Internal

Overview

  • time.After returns a channel that after the given duration, will send current time on it. This can be used to implement a timeout with select.

Creating Time Instances

  • Understand representation
  • time.Now()
  • time.Parse(time.RFC822, "01 Jan 00 00:00 UTC")
  • time.Unix()
  • time.UnixMicro()
  • time.UnixMilli()

time.Sleep()

https://golang.org/pkg/time/#Sleep

Sleep pauses the current goroutine for at least the duration d. A negative or zero duration causes Sleep to return immediately:

import "time"
...
secs := 10
time.Sleep(time.Duration(secs) * time.Second)

Other available time units: time.Milliseconds.

time.Now()

Return the current local time as an instance of a Time struct.

t0 := time.Now()

time.Since()

Time

A time structure that represents an instant in time with nanosecond precision.

sec()

Return seconds since Jan 1 year 1.

UnixNano()

Return the number of nanoseconds elapsed since January 1, 1970 UTC, represented on 8 bytes (int64). The result does not depend on the location associated with the time instance the method was called on.

After(Duration)

The After() returns a channel that will provide a Time instance after the given duration elapses. Equivalent with NewTimer(d).C.

The function can be used with a select statement to time out the select statement if none of the participating channels ever unblock. It does that by returning a channel what will send the current time after the provided duration.

Duration

The duration can be specified as "ns", "us" (or "µs"), "ms", "s", "m", "h".

Compute elapsed time (duration):

t0 := time.Now()
duration := time.Now().Sub(t0) // in milliseconds

Ticker

A Ticker holds a channel that delivers "ticks" of a clock at intervals.

NewTicker()

NewTicker() returns a new Ticker containing a channel that will send the current time on the channel after each tick. The period of the ticks is specified by the duration argument. The ticker will adjust the time interval or drop ticks to make up for slow receivers. Stop the ticker to release associated resources.

Tick

Tick is a convenience wrapper for NewTicker providing access to the ticking channel only. While Tick is useful for clients that have no need to shut down the Ticker, be aware that without a way to shut it down the underlying Ticker cannot be recovered by the garbage collector; it "leaks". Unlike NewTicker, Tick will return nil if d <= 0.

Functions

AfterFunc()

Formatting

TODO:

time.Now().Format("03:04 AM")


time.Now().Format(time.RFC822)

Predefined layouts:

  • time.ANSIC
  • time.UnixDate
  • time.RFC822
  • time.RFC822Z
  • time.RFC850
  • time.RFC1123
  • time.RFC1123Z
  • time.RFC3339
  • time.RFC3339Nano
  • time.Kitchen
  • time.Stamp
  • time.StampMilli
  • time.StampMicro
  • time.StampNano
  • time.DateTime "2006-01-02 15:04:05"
  • time.DateOnly "2006-01-02"
  • time.TimeOnly "15:04:05"

Idioms

A Clock that Does Something Every Second

for range time.Tick(1 * time.Second) {
  fmt.Printf(".\n")
}

Timestamp

timestamp := time.Now().Unix()