The Go time
package has a Format
function for displaying the parts of a
date and time in standard and custom ways. It works a bit different than you
might be used to from other languages. Rather than using strftime
identifiers
like in this string "%B %d, %Y"
, there is a canonical date that is used as a
reference point.
That canonical date is from Janary 2nd, 2006. That was a Monday. It was at 5
seconds after 3:04PM. The Unix format of it looks like "Mon Jan _2 15:04:05 MST 2006"
.
package main
import (
"fmt"
"time"
)
func main() {
// This specific time pulled from `time.Format` docs
t, _ := time.Parse(time.UnixDate, "Wed Feb 25 11:06:39 PST 2015")
// Reference date and time:
// "Mon Jan _2 15:04:05 MST 2006"
strf1 := t.Format("|2006|02|01|03:04:05|Day: Mon|")
fmt.Println("strf1:", strf1)
// strf1: |2015|25|02|11:06:39|Day: Wed|
strf2 := t.Format(time.DateTime)
strf3 := t.Format(time.RubyDate)
strf4 := t.Format(time.Kitchen)
fmt.Println("DateTime:", strf2) // DateTime: 2015-02-25 11:06:39
fmt.Println("RubyDate:", strf3) // RubyDate: Wed Feb 25 11:06:39 +0000 2015
fmt.Println("Kitchen:", strf4) // Kitchen: 11:06AM
}
Though there are a variety of useful formatting
constants already available like
DateTime
, RubyDate
, Kitchen
, etc., we can also define our own formatting
string by using the reference values for each part of a date and time.
If you want to reference the year, whether as YYYY
or YY
, it is always
going to be a form of 2006
, so 2006
or 06
respectively. Even though the
above time variable is in February, our format strings will always need to use
one of Jan
, January
, 01
or 1
.