На github есть пакет arrow
который обеспечивает парсинг даты и времени из строки, основанный на стиле форматирования С (помимо других полезных функций даты/времени). Вы можете ознакомиться с таблицей шаблонов для форматирования даты и времени в C.
1 |
Time flies like an arrow; fruit flies like a banana. |
Рекомендуем вам супер TELEGRAM канал по Golang где собраны все материалы для качественного изучения языка. Удивите всех своими знаниями на собеседовании! 😎
Мы публикуем в паблике ВК и Telegram качественные обучающие материалы для быстрого изучения Go. Подпишитесь на нас в ВК и в Telegram. Поддержите сообщество Go программистов.
Содержание статьи
Установка пакета arrow в Golang
Для установки выполните данную команду в терминале:
1 |
go get github.com/bmuller/arrow |
Совместимость strftime в Go
Проблема с форматированием времени в Golang в том, что формат данной строки базируется на реформатировании единственной даты, которую нужно помнить, что добавляет головной боли ленивому разработчику — 1/2 3:04:05 2006 -0700. В основе популярных языков программирования лежит C (Python и так далее), они используют форматирование на основе strftime, с которым многие знакомы.
Далее представлена совместимость strftime
для Golang с CFormat
и CParse
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
package main import ( "fmt" "github.com/bmuller/arrow" ) func main() { // форматирование fmt.Println("Текущая дата: ", arrow.Now().CFormat("%Y-%m-%d %H:%M")) // парсинг parsed, _ := arrow.CParse("%Y-%m-%d", "2015-06-03") fmt.Println("Какая-то другая дата: ", parsed) } |
Полезные функции arrow
Вы также можете использовать разные полезные функции arrow
для получения таких данных, как начало минуты, часа, дня, недели, месяца и года.
1 2 3 4 5 |
day := arrow.Now().AtBeginningOfWeek().CFormat("%Y-%m-%d") fmt.Println("First day of week: ", day) hour := arrow.Now().AtBeginningOfHour().CFormat("%Y-%m-%d %H:%M") fmt.Println("Первая секунда часа: ", hour) |
Вы также можете задействовать режим сна до нужного момента:
1 2 3 |
// сон до начала следующей минуты arrow.SleepUntil(arrow.NextMinute()) fmt.Println(arrow.Now().CFormat("%H:%M:%S")) |
Также есть полезные инструменты для получения сегодняшнего дня, вчерашнего дня или времени UTC:
1 2 3 4 5 6 7 8 |
day := arrow.Yesterday().CFormat("%Y-%m-%d") fmt.Println("Вчера: ", day) dayutc := arrow.UTC().Yesterday().CFormat("%Y-%m-%d %H:%M") fmt.Println("Вчера, UTC: ", dayutc) newyork := arrow.InTimezone("America/New_York").CFormat("%H:%M:%s") fmt.Println("Время в Нью-Йорке: ", newyork) |
Также можно сгенерировать диапазон повторений до определенного момента времени:
1 2 3 4 |
// Выводит каждую минуту с текущего момента до прошествии 24 часов for _, a := range arrow.Now().UpTo(arrow.Tomorrow(), arrow.Minute) { fmt.Println(a.CFormat("%Y-%m-%d %H:%M:%S")) } |
Для запуска тестов:
1 |
go test |
Администрирую данный сайт с целью распространения как можно большего объема обучающего материала для языка программирования Go. В IT с 2008 года, с тех пор изучаю и применяю интересующие меня технологии. Проявляю огромный интерес к машинному обучению и анализу данных.
E-mail: vasile.buldumac@ati.utm.md
Образование
Технический Университет Молдовы (utm.md), Факультет Вычислительной Техники, Информатики и Микроэлектроники
- 2014 — 2018 Universitatea Tehnică a Moldovei, ИТ-Инженер. Тема дипломной работы «Автоматизация покупки и продажи криптовалюты используя технический анализ»
- 2018 — 2020 Universitatea Tehnică a Moldovei, Магистр, Магистерская диссертация «Идентификация человека в киберпространстве по фотографии лица»