Задать вопрос
GRbit
@GRbit
Linux, гитара, паяльник

Golang как элегантно спарсить time.Duration?

Нужно распарсить string в time.Duration. Формат "HH:MM:SS"

В Go уже есть весьма удобный парсинг дат, можно прочесть строку через time.Parse("15:04:05", stringToParse), но из далее из этого нужно получить time.Duration{}. Мне показалось что в стандартной библиотеке есть другой удобный метод time.Sub().

Казалось бы подобный код должен работать:

func parseDur(s string) time.Duration {
	t, _ := time.Parse("15:04:05", s)
	return t.Sub(time.Time{})
}


Но этот код возвращает time.Duration{} минус 1 год. Можно пофиксить возвращая t.AddDate(1, 0, 0).Sub(time.Time{}) но это же так уродски выглядит.

Я это к чему, нулевое значение времени в Go это 0001-01-01 00:00:00 +0000 UTC но time.Parse() по дефолту возвращает
0000-01-01 00:00:00 +0000 UTC. Это выглядит странным. Не является ли это каким-то косяком дизайна и не нуждается ли в исправлении на уровне стандартной библиотеки?

Основной вопрос "как парсить элегантно" остаётся в силе, может у кого есть какие-то красивые методы без странных констант.
  • Вопрос задан
  • 496 просмотров
Подписаться 2 Простой 5 комментариев
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы