Задать вопрос
kolyafat
@kolyafat

Parse time golang, странное поведение, но почему?

Доброго времени, Уважаемое сообщество. Может кто сталкивался с подобной проблемой, больше похожей на БАГ. Пытался анмаршалить строку даты и не вышло, вот к чему пришел:
func (c *CustomDate) UnmarshalJSON(b []byte) (err error) {
	s := strings.Trim(string(b), `"`) 
	if s == "null" {
		return
	}
	t, err := time.Parse(time.RFC3339, time.RFC3339)
	if err != nil {
		return err
	}
	c.Time = t
	return
}

Почему эта конструкция возвращает ошибку парсинга? Если совсем суть:
func main() {
	_, err := time.Parse(time.RFC3339, time.RFC3339)
	if err != nil {
		panic(err)
	}
}

Как??? go 1.9
Заранее благодарю всех заинтересовавшихся.
  • Вопрос задан
  • 378 просмотров
Подписаться 1 Сложный Комментировать
Решения вопроса 1
@KingstonKMS
Действительно, странная конструкция. И похоже на баг. Функция time.Parse принимает формат и значение времени. А тут два одинаковых аргумента.
Собственно, вот в примере в самом низу есть такая строка где описана эта ошибка
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
uvelichitel
@uvelichitel Куратор тега Go
habrahabr.ru/users/uvelichitel
Потому что константа const time.RFC3339 = "2006-01-02T15:04:05Z07:00", не является валидным временем. Z в RFC3339 это буквенный индекс временного пояса (Зулу в данном случае). Зона может быть также обозначена смещением +07:00 Или так или эдак:
"2006-01-02T15:04:05Z"
или
"2006-01-02T15:04:05+07:00"
А константа из пакета - годный шаблон для парсинга, но не валидное время
Ответ написан
Комментировать
kolyafat
@kolyafat Автор вопроса
Спасибо отзывчивым людям, вопрос снимаю, разобрался, обычная ЗАТУПА. Не понял почему не получалось, но не прямые руки точно посодействовали. Вот так работает:
const layout = "2006-01-02T15:04:05.99"

func (c *CustomDate) UnmarshalJSON(b []byte) (err error) {
	s := strings.Trim(string(b), `"`)
	if s == "null" {
		return
	}
	t, err := time.Parse(layout, s)
	if err != nil {
		return err
	}
	c.Time = t
	return
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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