Skip to main content

Форматирование даты/времени

Информация взята Format/parse a time or date

Простейший пример

Go, в отличие от других языков, использует свою нотацию для времени не yyyy-MM-dd. Go использует мнемоническую нотацию:

Mon Jan 2 15:04:05 MST 2006.

Её надо переписать в виде, котором надо. Проще всего это запомнить, если переписать её как 01/02 03:04:05PM ‘06 -0700.

Например:

const (
    layoutISO = "2006-01-02"
    layoutUS  = "January 2, 2006"
)
date := "1999-12-31"
t, _ := time.Parse(layoutISO, date)
fmt.Println(t)                  // 1999-12-31 00:00:00 +0000 UTC
fmt.Println(t.Format(layoutUS)) // December 31, 1999

Для форматировании времени применяются следующие методы из пакета time.Time:

  • Метод Format для форматирования строки из времени.
  • Функция time.Parse для получения даты из строки.
func (t Time) Format(layout string) string
func Parse(layout, value string) (Time, error)

Стандартные форматы:

РаскладкаЗамечание
January 2, 2006Дата
01/02/06
Jan-02-06
15:04:05Время
3:04:05 PM
Jan _2 15:04:05Timestamp
Jan _2 15:04:05.000000с микросекундами
2006-01-02T15:04:05-0700ISO 8601 (RFC 3339)
2006-01-02
15:04:05
02 Jan 06 15:04 MSTRFC 822
02 Jan 06 15:04 -0700с временной зоной
Mon, 02 Jan 2006 15:04:05 MSTRFC 1123
Mon, 02 Jan 2006 15:04:05 -0700с временной зоной

Также в пакете представлены следующие константы:

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"
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"
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"

Опции форматирования:

ТипОпции
Год06 2006
Месяц01 1 Jan January
День02 2 _2 (width two, right justified)
День неделиMon Monday
Часы03 3 15
Минуты04 4
Секунды05 5
мс мс нс.000 .000000 .000000000
мс мс нс.999 .999999 .999999999 (trailing zeros removed)
am/pmPM pm
Часовая зонаMST
Сдвиг часовой зоны-0700 -07 -07:00 Z0700 Z07:00