При сериализации информации о дате и времени важно выбрать верный формат. Данная инструкция покажет, как пакет time
помогает выбрать верный формат и выполнить сериализацию данных должным образом.
Как выполнить сериализацию даты в Golang?
1. Создайте файл serialize.go
со следующим содержимым:
Рекомендуем вам супер TELEGRAM канал по Golang где собраны все материалы для качественного изучения языка. Удивите всех своими знаниями на собеседовании! 😎
Мы публикуем в паблике ВК и Telegram качественные обучающие материалы для быстрого изучения Go. Подпишитесь на нас в ВК и в Telegram. Поддержите сообщество Go программистов.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
package main import ( "encoding/json" "fmt" "time" ) func main() { eur, err := time.LoadLocation("Europe/Vienna") if err != nil { panic(err) } t := time.Date(2017, 11, 20, 11, 20, 10, 0, eur) // json.Marshaler интерфейс b, err := t.MarshalJSON() if err != nil { panic(err) } fmt.Println("Сериализация как RFC 3339:", string(b)) t2 := time.Time{} t2.UnmarshalJSON(b) fmt.Println("Десериализация из RFC 3339:", t2) // Сериализация UNIX epoch := t.Unix() fmt.Println("Сериализация UNIX:", epoch) // Десериализация UNIX jsonStr := fmt.Sprintf("{ \"created\":%d }", epoch) data := struct { Created int64 `json:"created"` }{} json.Unmarshal([]byte(jsonStr), &data) deserialized := time.Unix(data.Created, 0) fmt.Println("Десериализация из UNIX:", deserialized) } |
2. Запустите код через go run serialize.go
в главном терминале;
3. Посмотрите на результат:
1 2 3 4 |
Сериализация как RFC 3339: "2017-11-20T11:20:10+01:00" Десериализация из RFC 3339: 2017-11-20 11:20:10 +0100 +0100 Сериализация UNIX: 1511173210 Десериализация из UNIX: 2017-11-20 10:20:10 +0000 UTC |
Сериализация времени в JSON
Функция Time
имплементирует интерфейсы для сериализации Binary, Gob и JSON. Формат JSON считается универсальным, поэтому в примере показано, как сериализовать значение в JSON. Обратите внимание, что функция Time
сериализует значение в формате RFC 3339 (https://www.ietf.org/rfc/rfc3339.txt
), что предлагает так называемый интернетный формат даты/времени.
Другим универсальным способом сериализации/сохранения времени является использование времени Unix. Время эпохи (Unix) независимо от часовых поясов, так как оно определяется секундами/наносекундами, прошедшими с момента абсолютной точки во времени (1 Января 1970). В конечном итоге оно представлено как число, поэтому нет причины для сериализации и десериализации значения.
Администрирую данный сайт с целью распространения как можно большего объема обучающего материала для языка программирования Go. В IT с 2008 года, с тех пор изучаю и применяю интересующие меня технологии. Проявляю огромный интерес к машинному обучению и анализу данных.
E-mail: vasile.buldumac@ati.utm.md
Образование
Технический Университет Молдовы (utm.md), Факультет Вычислительной Техники, Информатики и Микроэлектроники
- 2014 — 2018 Universitatea Tehnică a Moldovei, ИТ-Инженер. Тема дипломной работы «Автоматизация покупки и продажи криптовалюты используя технический анализ»
- 2018 — 2020 Universitatea Tehnică a Moldovei, Магистр, Магистерская диссертация «Идентификация человека в киберпространстве по фотографии лица»