9

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.

Jonathan Hall
  • 75,165
  • 16
  • 143
  • 189
J.Done
  • 2,783
  • 9
  • 31
  • 58

3 Answers3

12

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))
Flavio Copes
  • 4,131
  • 4
  • 27
  • 30
4

See https://golang.org/pkg/time/#pkg-constants It is the time "01/02 03:04:05PM '06 -0700" Because each component has a different number (1, 2, 3, etc.), it can determine from the numbers what components you want.

Vadim Beskrovnov
  • 941
  • 6
  • 18
1

20060102150405 is a date and time format 2006/01/02 15:04:05

package main

import ( "fmt" "time" )

func main() {

date1 := time.Now().Format("2006/01/02 15:04")
fmt.Println(date1)//2009/11/10 23:00

date2 := time.Now().Format("20060102150405")
fmt.Println(date2)//20091110230000

}

https://play.golang.org/p/kIfNRQ50JP

Nisal Edu
  • 7,237
  • 4
  • 28
  • 34