Эта статья является частью серии Begin Go: содержит мой опыт изучения языка Go. Любые отзывы будут очень признательны.
Парсинг времени строки
Выполняя упражнение из go-трека exercism, я столкнулся с проблемой при разборе time string
.
Я пытался разобрать 7/13/2020 20:32:00
, но получаю время с пустым значением: 0001-01-01 00:00:00 +0000 UTC
.
Пользовательский Layout
В языке Go мы форматируем и разбираем время с помощью шаблонного Layout
, который имеет тип string
. Вы можете прочитать статью на gobyexample.com.
Вот код, который я использовал для разбора приведенной выше строки:
date := "7/13/2020 20:32:00"
t, _ := time.Parse("01/02/2006 15:04:05", date)
fmt.Print(t)
// 0001-01-01 00:00:00 +0000 UTC
С ведущим нулем или без него
Моя ошибка в том, что я использовал ведущий ноль для разбора даты и месяца, когда я не должен был использовать ведущие нули. Разбор был успешным после того, как я изменил свой код на :
t, _ := time.Parse("1/02/2006 15:04:05", date)
Неправильное использование ведущего нуля для даты, месяца и т.д. может привести к потенциальным ошибкам. Поэтому всегда обращайте внимание на то, следует ли использовать ведущий ноль или нет в Layout
для форматирования/разбора времени.
Запоминание представления времени в Layout
Go имеет другое представление времени для форматирования времени по сравнению с другими языками. Другие языки обычно используют такие представления времени, как HH
или m
для представления месяца или часа.
Представления времени в Go приведены ниже:
Представление | Представление |
---|---|
месяц | |
дата | |
15 |
час |
04 |
минута |
05 |
секунда |
2006 |
год |
07:00 |
смещение времени (часовой пояс) |
Вопрос в том, нужно ли нам искать эти представления времени каждый раз, когда мы используем time
? Или, может быть, есть другой способ запомнить эти символы?
Глядя на таблицу выше, мы можем увидеть шаблон, который соответствует хорошо известному формату времени с одним исключением. Блок кода ниже покажет, как я могу запомнить представление времени:
// Well known time format
"Jan 02 2016 15:04:05+07:00"
// Move back the year, right before time offset / time zone.
"Jan 02 15:04:05 2016 +07:00"
// Changing to number presentation,
// will show a pattern of an incrementing numbers
"01 02 03:04:05 2016 +07:00"
Ссылки
- Формат времени и синтаксический анализ на gobyexamples
Атрибуция
- Персонаж Go Gopher создан Renee French