Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What does 20060102150405 mean?

Tags:

go

I would like to get current time value. I found this answer which works for me but don't know why format method take 20060102150405 value? Not like yyyyMMdd hhmmss.

like image 480
J.Done Avatar asked Jul 18 '17 08:07

J.Done


1 Answers

Go's time formatting unique and different than what you would do in other languages. Instead of having a conventional format to print the date, Go uses the reference date 20060102150405 which seems meaningless but actually has a reason, as it's 1 2 3 4 5 6 in the Posix date command:

Mon Jan 2 15:04:05 -0700 MST 2006
0   1   2  3  4  5              6

The timezone is 7 but that sits in the middle, so in the end the format resembles 1 2 3 4 5 7 6.

This online converter is handy, if you are transitioning from the strftime format.

Interesting historical reference: https://github.com/golang/go/issues/444

The time package provides handy constants as well:

const (
        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"
        // Handy time stamps.
        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"
)

You can use them like this:

t := time.Now()
fmt.Println(t.Format(time.ANSIC))
like image 91
Flavio Copes Avatar answered Oct 13 '22 07:10

Flavio Copes