вторник, 28 июля 2020 г.

Пакет time в Golang, тип Time

type Time struct {
    // содержит отфильтрованные или неэкспортированные поля
}

Time представляет собой момент времени с наносекундной точностью.

Программы, использующие времена, обычно должны хранить и передавать их как значения, а не как указатели. То есть переменные времени и поля структуры должны иметь тип time.Time, а не *time.Time.

Значение Time может использоваться несколькими программами одновременно, за исключением того, что методы GobDecode, UnmarshalBinary, UnmarshalJSON и UnmarshalText не являются безопасными для конкурентности.

Моменты Time можно сравнить с помощью методов Before, After и Equal. Метод Sub вычитает два момента, создавая Duration. Метод Add добавляет Time и Duration, создавая Time.

Нулевым значением типа Time является January 1, year 1, 00:00:00.000000000 UTC. Поскольку это время вряд ли подходит на практике, метод IsZero предоставляет простой способ обнаружения времени, которое не было явно инициализировано.

Каждое время связывает с ним Location (местоположение), к которому обращаются при расчете формы представления времени, таких методах как Format, Hour и Year. Методы Local, UTC и In возвращают Time с определенным местоположением. Изменение местоположения таким образом изменяет только представление; оно не меняет момент времени, который будет обозначен, и, следовательно, не влияет на вычисления со временем.

Представления значения Time, сохраненного методами GobEncode, MarshalBinary, MarshalJSON и MarshalText, хранят смещение Time.Location, но не имя местоположения. Поэтому они теряют информацию о переходе на летнее время.

В дополнение к требуемым показаниям "настенных часов", Time может содержать дополнительное показание монотонных часов текущего процесса, чтобы обеспечить дополнительную точность для сравнения или вычитания.

Обратите внимание, что оператор Go == сравнивает не только момент времени, но и местоположение и показания монотонных часов. Следовательно, значения времени не должны использоваться в качестве ключей карты или базы данных без предварительной гарантии того, что для всех значений было установлено одинаковое местоположение, что может быть достигнуто с помощью метода UTC или Local, и что монотонное считывание часов было удалено установкой t = t.Round(0). В общем, предпочитайте t.Equal(u), а не t == u, так как t.Equal использует наиболее точное из доступных сравнений и правильно обрабатывает случай, когда только один из его аргументов имеет монотонное чтение часов.


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


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

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