Исходя из Python, немного сложно понять, как форматировать/анализировать дату и время в Go. Это сбивает с толку, потому что Go не форматирует/анализирует дату и время, используя такие коды формата, как %d, %m, %Y. Вместо того, чтобы использовать коды формата, Go использует разные макеты одной даты и времени. Здесь мы увидим, как Go форматирует/анализирует дату и время на основе макетов.

Как Python форматирует дату/время

Python имеет модуль datetime для операций с датами. Модуль datetime имеет метод strftime и метод класса strptime для форматирования/анализа даты и времени. Теперь, чтобы проанализировать дату и время, то есть преобразовать строку, содержащую дату и время, в объект даты и времени Python, пользователю необходимо сообщить python о формате даты и времени в строке. Таким образом, Python использует коды формата для той же цели. Это означает, что strptime принимает строку, содержащую дату и время, и другую строку, содержащую коды формата. Аналогично для формата, т.е. преобразования объекта даты и времени в строку с кодами формата даты и времени.

>>> from datetime import datetime
>>> datetime.strptime('2016-10-18 10:45:30', '%Y-%m-%d %H:%M:%S')
datetime.datetime(2016, 10, 18, 10, 45, 30)
>>> datetime.strptime('2016/January/18 10:45:30', '%Y/%B/%d %H:%M:%S')
datetime.datetime(2016, 1, 18, 10, 45, 30)
>>> dobj = datetime.strptime('2016/January/18 10:45:30', '%Y/%B/%d %H:%M:%S')
>>> dobj.strftime('%Y-%m-%d %H:%M:%S')
'2016-01-18 10:45:30'

Как Golang форматирует дату/время

Встроенный пакет time используется для операций с датой и временем в Go. В пакете time есть функция Parse для анализа строки даты и времени в типе времени и функция приемника, называемая Format для типа time. В Go вместо кода формата пользователь должен указать желаемый макет предопределенной даты и времени. Go использует следующую дату и время для макета:

Пн, 2 января 15:04:05 MST 2006

Чтобы запомнить эту дату и время, вы можете использовать следующий макет вышеуказанной даты и времени. Отметьте приращение числа слева направо на 1 для каждого сегмента.

01/02 03:04:05PM ’06 -0700

Таким образом, в случае Go мы предоставим дату 2 января 2006 года в 15:04:05.

Например, если мы хотим разобрать дату и время с именем 2016/Декабрь/18T10:45:30, мы предоставим lay, как показано ниже:

2006/Январь/02T15:04:05

package main
import (
 "fmt"
 "time"
)
func main() {
        layout1 := "2006/January/02T15:04:05"
        a, _ := time.Parse(layout1, "2016/December/18T10:45:30")
        fmt.Printf("%v\n", a)
        layout2 := "2006-Jan-02 15:04:05"
        b, _ := time.Parse(layout2, "1988-Dec-18 10:45:30")
        fmt.Printf("%v\n", b)
 
        layout3 := "2006/01/02 15-04-05"        
        c, _ := time.Parse(layout3, "1930/12/18 10-45-30")
        fmt.Println(c.Format("03:04:05PM 02-Jan-2006"))
}

Результат выглядит следующим образом:

2016-12-18 10:45:30 +0000 UTC
1988-12-18 10:45:30 +0000 UTC
10:45:30AM 18-Dec-1930

Пожалуйста, НАЖМИТЕ, чтобы увидеть код в действии на игровой площадке Go.

Таким образом, в основном Go попытается сопоставить макет данной строки с предопределенным datetime, чтобы проанализировать дату и время.