Форматирование даты Go в bash-дружественной манере
С помощью buildah
Я могу узнать дату создания моего изображения с помощью этого вызова:
buildah images --format '{{.CreatedAt}}' my_image
--format
Аргумент является шаблоном Go, как описано для связанной команды.
Это возвращает:
Nov 13, 2018 08:04
Насколько я могу судить, это мой текущий часовой пояс, который он использует, но он не локализован, и в нем отсутствует информация о часовом поясе. Если я кормить вывод в Linux date
вот так:
date -d "`buildah images --format '{{.CreatedAt}}' my_container`" +%s
Это дает мне то, что я хочу, секунды эпохи UNIX:
1542063840
Тем не менее, так как мой '{{.CreatedAt}}'
шаблон Go, который я должен быть в состоянии отформатировать, как я могу напрямую распечатать секунды эпохи (или RFC-3339
и т. д.), а не полагаться на date
,
Как вы можете догадаться, я новичок в Go, и в документации нет ничего, что я мог бы скопировать и вставить
ПРИМЕЧАНИЕ: после ответа ниже, запрос на улучшение размещен на buildah
вопросы БД.
1 ответ
К сожалению, вам не повезло.
Значение параметра, переданное в выполнение шаблона, имеет тип imageOutputParams
, который объявлен в images.go
:
type imageOutputParams struct {
Tag string
ID string
Name string
Digest string
CreatedAt string
Size string
}
Как видите, CreatedAt
поле имеет тип string
не time.Time
так что ты не можешь позвонить time.Time
методы на это. Вы также не можете выполнять какую-либо полезную обработку даты / времени без пользовательских зарегистрированных функций. Но так как вы просто предоставляете текст шаблона, вы также не можете зарегистрировать пользовательские функции.
Шаблон, который вы передаете, выполняется в функции outputUsingTemplate()
как это:
err = tmpl.Execute(os.Stdout, params)
куда params
является значением вышеупомянутой структуры.
Рекомендовать владельцам проекта добавить новое поле, содержащее CreatedAt
метка времени как time.Time
значение, чтобы вы могли получить секунды эпохи, используя Time.Unix()
, Шаблон будет выглядеть так:
{{.CreatedAtTime.Unix}}