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
.

- 75,165
- 16
- 143
- 189

- 2,783
- 9
- 31
- 58
-
1`2006-01-02 15:04:05`? – axiac Jul 18 '17 at 08:11
3 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))

- 3
- 3

- 4,131
- 4
- 27
- 30
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.

- 941
- 6
- 18
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
}

- 7,237
- 4
- 28
- 34