Форматирование даты 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}}
Другие вопросы по тегам