Golang Time Format Example

Alex Garella image

Alex Garella

18 April 2023

Go (Golang) supports time formatting out of the standard library. It’s possible to specify a pattern-like format when converting a time.Time to a string value. It’s possible to use the following method: time.Format

func (t Time) Format(layout string) string

Format returns a textual representation of the time value formatted according to layout, which defines the format by showing how the reference time, defined to be Mon Jan 2 15:04:05 -0700 MST 2006 would be displayed if it were the value; it serves as an example of the desired output. The same display rules will then be applied to the time value.

Format uses a layout defined as a default date 2 Jan 2006 which will be used to format the time, let’s see a couple of examples to better understand how this works.

Golang Time Format YYYY-MM-DD

Here’s a typical scenario, where we want to format a time.Time instance into a standard string in the YYYY-MM-DD format.

package main

import "time"
import "fmt"

func main() {
  now := time.Now()
  fmt.Println(now.Format("2006-02-01"))
}

which will result in

2009-10-11

Bear in mind that if you run this on play.golang.org the sandbox has been seeded with a static time value (2009-10-11) so you might see always the same date - try running these example on your machine

Golang Time Formatting Standards

In the Go (Golang) standard library we have also a bunch of useful constants used as layouts for formatting time, you can find them in the time package. Standard

  • ANSIC Mon Jan 02 15:04:05 2006
  • UnixDate Mon Jan 02 15:04:05 MST 2006
  • RubyDate Mon Jan 02 15:04:05 -0700 2006
  • RFC822 02 Jan 06 15:04 MST
  • RFC822Z 02 Jan 06 15:04 -0700
  • RFC850 Monday, 02-Jan-06 15:04:05 MST
  • RFC1123 Mon, 02 Jan 2006 15:04:05 MST
  • RFC1123Z Mon, 02 Jan 2006 15:04:05 -0700
  • RFC3339 2006-01-02T15:04:05Z07:00
  • RFC3339Nano 2006-01-02T15:04:05.999999999Z07:00
  • Kitchen 3:04PM

Based on the above formats we can easily use any of those constants to format a time value as we prefer. Let’s see an example

package main

import "time"
import "fmt"

func main() {
  now := time.Now()
  fmt.Println(now.Format(time.RFC822))
  fmt.Println(now.Format(time.Kitchen))
  fmt.Println(now.Format(time.UnixDate))
}

Which results in the following

10 Nov 09 23:00 UTC
11:00PM
Tue Nov 10 23:00:00 UTC 2009