суббота, 1 августа 2020 г.

Пакет time в Golang, форматирование Time с помощью метода Format

func (t Time) Format(layout string) string

Format возвращает текстовое представление значения времени, отформатированного в соответствии с layout, который определяет формат, показывая, как эталонное время определенное как

Mon Jan 2 15:04:05 -0700 MST 2006

будет отображаться, если это будет значение; это служит примером желаемого результата. Те же правила отображения будут применяться к значению времени.

Дробная секунда представляется путем добавления точки и нулей в конец секции секунд строки макета, как в "15:04:05.000" для форматирования метки времени с точностью до миллисекунды.

Предопределенные макеты ANSIC, UnixDate, RFC3339 и другие описывают стандартные и удобные представления эталонного времени.

Пример использования Format

package main

import (
    "fmt"
    "time"
)

func main() {
    // Анализируем значение времени из строки 
    // в стандартном формате Unix.
    t, err := time.Parse(time.UnixDate, "Sat Mar  7 11:06:39 PST 2015")
    // Всегда проверяйте ошибки, 
    // даже если они не должны возникать.
    if err != nil { 
        panic(err)
    }

    // Метод String типа time.Time выдает 
    // полезное значение без какого-либо формата.
    // Println проверяет, что передеанное значение 
    // реализует интерфейс Stringer 
    // и вызывает его метод String
    fmt.Println("Формат по умолчанию:", t)

    // Предопределенные константы в пакете
    // реализуют общие макеты.
    fmt.Println("Unix формат:", t.Format(time.UnixDate))

    // Часовой пояс, привязанный к значению времени, 
    // влияет на его вывод.
    fmt.Println("То же самое, но в UTC:", t.UTC().Format(time.UnixDate))

    // Остальная часть этой функции демонстрирует свойства
    // строки макета, используемой в формате.

    // Строка макета, используемая 
    // функцией Parse и методом Format
    // показывает на примере, как должно быть 
    // представлено эталонное время.
    // Подчеркнем, что нужно показать, 
    // как форматируется эталонное время,
    // не время выбора пользователя. 
    // Таким образом, каждая строка макета является
    // представление метки времени,
    //  Jan 2 15:04:05 2006 MST
    // Простой способ запомнить это значение - 
    // оно хранится при представлении
    // в этом порядке значения 
    // (выровненные с элементами выше):
    //    1 2  3  4  5    6  -7
    // Ниже показаны некоторые примеры.

    // Большинство применений Format и Parse 
    // используют строки константного макета, такие как
    // определенные в пакете time, но интерфейс гибкий,
    // как показывают эти примеры.

    // Определяем вспомогательную функцию, 
    // чтобы вывод примеров выглядел красиво.
    do := func(name, layout, want string) {
        got := t.Format(layout)
        if want != got {
            fmt.Printf("ошибка: для %q получено %q; ожидалось %q\n", layout, got, want)
            return
        }
        fmt.Printf("%-25s %q дает %q\n", name, layout, got)
    }

    // Распечатать заголовок в нашем выводе.
    fmt.Printf("\nФорматы:\n\n")

    // Простой стартовый пример.
    do("Базовый", "Mon Jan 2 15:04:05 MST 2006", "Sat Mar 7 11:06:39 PST 2015")

    // Для печати значений фиксированной ширины, 
    // таких как дата, которые могут быть одним или
    // двумя символами (7 против 07), 
    // используйте _ вместо пробела в строке макета.
    // Здесь мы печатаем только день, 
    // который равен 2 в нашей строке макета 
    // и 7 в нашем значении.
    do("Без пробела", "<2>", "<7>")

    // Подчеркивание представляет пробел, 
    // если дата имеет только одну цифру.
    do("Пробелы", "<_2>", "< 7>")

    // "0" указывает заполнение нулями 
    // для однозначных значений.
    do("Нули", "<02>", "<07>")

    // Если значение уже правильной ширины, 
    // заполнение не используется.
    // Например, второе (05 в эталонном времени) 
    // в нашем значении равно 39,
    // так что он не нуждается в заполнении, 
    // а минуты (04, 06) нуждаются.
    do("Подавленное заполнение", "04:05", "06:39")

    // Предопределенная константа Unix 
    // использует подчеркивание для дополнения дня.
    // Сравните с нашим простым начальным примером.
    do("Unix", time.UnixDate, "Sat Mar  7 11:06:39 PST 2015")

    // Час эталонного времени 15 или 3PM. 
    // Макет может выражать это так или иначе,
    // и так как наша значение - утро, 
    // мы должны видеть это как время AM. 
    // Мы показываем оба в одной строке формата. Строчный вид тоже.
    do("AM/PM", "3PM==3pm==15h", "11AM==11am==11h")

    // При разборе, если за значением секунд 
    // следует десятичная точка и несколько цифр, 
    // которые считаются долями секунды, даже если
    // строка макета не представляет доли секунды.
    // Здесь мы добавляем долю секунды 
    // к нашему значению времени, использованному выше.
    t, err = time.Parse(time.UnixDate, "Sat Mar  7 11:06:39.1234 PST 2015")
    if err != nil {
        panic(err)
    }
    // Не отображается в выводе, 
    // если строка макета не содержит
    // представление дробной секунды.
    do("Без дробной части", time.UnixDate, "Sat Mar  7 11:06:39 PST 2015")

    // Дробные секунды могут быть напечатаны 
    // путем добавления серии 0 или 9 после
    // десятичной точки в значении секунд в строке макета.
    // Если цифры макета равны 0, 
    // дробная секунда имеет указанную ширину.
    // Обратите внимание, что выход имеет конечный ноль.
    do("0 для дробной части", "15:04:05.00000", "11:06:39.12340")

    // Если дробь в макете равна 9, конечные нули удаляются.
    do("9 для дробной части", "15:04:05.99999999", "11:06:39.1234")

}

Вывод:

Формат по умолчанию: 2015-03-07 11:06:39 +0000 PST
Unix формат: Sat Mar  7 11:06:39 PST 2015
То же самое, но в UTC: Sat Mar  7 11:06:39 UTC 2015

Форматы:

Базовый                   "Mon Jan 2 15:04:05 MST 2006" дает "Sat Mar 7 11:06:39 PST 2015"
Без пробела               "<2>" дает "<7>"
Пробелы                   "<_2>" дает "< 7>"
Нули                      "<02>" дает "<07>"
Подавленное заполнение    "04:05" дает "06:39"
Unix                      "Mon Jan _2 15:04:05 MST 2006" дает "Sat Mar  7 11:06:39 PST 2015"
AM/PM                     "3PM==3pm==15h" дает "11AM==11am==11h"
Без дробной части         "Mon Jan _2 15:04:05 MST 2006" дает "Sat Mar  7 11:06:39 PST 2015"
0 для дробной части       "15:04:05.00000" дает "11:06:39.12340"
9 для дробной части       "15:04:05.99999999" дает "11:06:39.1234"


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


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

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