Golang: Format Date and Time

13 August, 2021 | 232 words | View Raw | History

Most programming languages use the same layout (dd-mm-yyyy) to format date and time, but Go decided to go a different route. Below is a little cheat sheet of how to format date and time in Go.

Examples

Parsing exisiting date

var (
    timeToParse = "2021-09-13T07:43:52.823"
    layout      = "2006-01-02T03:04:05.999"
)

toTime, _ := time.Parse(layout, timeToParse)

fmt.Printf("(%T): %s\n", toTime, toTime)

// output: (time.Time): 2021-09-13 07:43:52.823 +0000 UTC

Formatting date

now := time.Now()
fmt.Println("Default:", now)
fmt.Println("Formatted:", now.Format("02-01-2006 15:04:05 -0700 MST"))

// output: Default: 2021-08-13 09:01:29.233757 +0200 CEST m=+0.000065018
// output: Formatted: 13-08-2021 09:01:29 +0200 CEST

Options

Type Options
Year 06 2006
Month 01 1 Jan January
Day 02 2 _2
Weekday Mon Monday
Hours 03 3 15
Minutes 04 4
Seconds 05 5
ms μs ns .000 .000000 .000000000
ms μs ns .999 .999999 .999999999
am / pm PM pm
Timezone MST
Offset -0700 -07 -07:00 Z0700 Z07:00

Predefined layouts

Name Layout
ANSIC Mon Jan _2 15:04:05 2006
UnixDate Mon Jan _2 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 // RFC822 with numeric zone
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 // RFC1123 with numeric zone
RFC3339 2006-01-02T15:04:05Z07:00
RFC3339Nano 2006-01-02T15:04:05.999999999Z07:00
Kitchen 3:04PM
Stamp Jan _2 15:04:05
StampMilli Jan _2 15:04:05.000
StampMicro Jan _2 15:04:05.000000
StampNano Jan _2 15:04:05.000000000