Skip to content

Latest commit

 

History

History
51 lines (40 loc) · 1.78 KB

format-date-and-time-with-time-constants.md

File metadata and controls

51 lines (40 loc) · 1.78 KB

Format Date And Time With Time Constants

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.