понедельник, 13 апреля 2020 г.

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

Go не использует формат yyyy-mm-dd для форматирования времени. Вместо этого вы форматируете специальный параметр макета (layout)

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.Parse разбирает строку даты
  • Функция Format форматирует time.Time

Они имеют следующие сигнатуры:

func Parse(layout, value string) (Time, error)
func (t Time) Format(layout string) string

Стандартные форматы времени и даты

Go layout Примечание
January 2, 2006
01/02/06
Jan-02-06
Date
15:04:05
3:04:05 PM
Time
Jan _2 15:04:05
Jan _2 15:04:05.000000
Timestamp с микросекундами
2006-01-02T15:04:05-0700
2006-01-02
15:04:05
ISO 8601 (RFC 3339)
02 Jan 06 15:04 MST
02 Jan 06 15:04 -0700
RFC 822 с числовой зоной
Mon, 02 Jan 2006 15:04:05 MST
Mon, 02 Jan 2006 15:04:05 -0700
RFC 1123 с числовой зоной

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

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"
// Удобные метки времени.
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 (ширина 2, выравнивание справа)
День недели Mon Monday
Часы 03 3 15
Минуты 04 4
Секунды 05 5
ms μs ns .000 .000000 .000000000
ms μs ns .999 .999999 .999999999 (завершающие нули удалены)
am/pm PM pm
Timezone (временная зона) MST
Смещение -0700 -07 -07:00 Z0700 Z07:00

Крайние случаи

Невозможно указать, что час должен отображаться без начального нуля в 24-часовом формате времени.

Нельзя указывать полночь как 24:00 вместо 00:00. Типичное использование для этого будет давать часы работы, заканчивающиеся в полночь, например, с 07:00 до 24:00.

Невозможно указать время, содержащее високосную секунду: 23:59:60. Фактически, пакет времени предполагает григорианский календарь без високосных секунд.


Читайте также:


Комментариев нет:

Отправить комментарий