2015-08-15 2 views
0

Я хранения переменной в базу данных MySQL с типом поля VARCHAR(255) как это:Почему я не могу разобрать уже строку RFC3339 на строку RFC3339?

ts, err := time.Parse(time.RFC3339, nonce[0:20])

, который прекрасно работает и показывает вверх, как это:

pic1

Тогда, когда Мне нужно получить его из базы данных. Я делаю это:

rows, err := db.Query("SELECT nonce, time FROM noncestore WHERE endpoint=?", endpoint) 

     var sTimeStamp, nonceHolder string 
     for rows.Next() { 
       err = rows.Scan(&nonceHolder, &sTimeStamp) 
       errCheck(err) 

Gives error//>> timeStamp, err := time.Parse(time.RFC3339, sTimeStamp) 
       errCheck(err) 

       if timeStamp == ts && nonceHolder == s { 
         return errors.New("Nonce already used") 
       } 

       if now.Sub(timeStamp) < *maxNonceAge { 
         _, err := db.Query("INSERT INTO noncestore SET nonce=?, time=?, endpoint=?", nonceHolder, sTimeStamp, endpoint) 
         errCheck(err) 
       } 
     } 

линия отмечено выше, дает мне эту ошибку:

2015/08/14 21:56:18 http: panic serving [::1]:49663: Failed: parsing time "2015-08-15 03:56:00" as "2006-01-02T15:04:05Z07:00": cannot parse " 03:56:00" as "T" 

Как пришел он способен преобразовать его в RFC3339 и сохранить его в базе данных, но когда приходит время, чтобы получить его и отформатировать его обратно RFC3339 так, чтобы Я могу использовать в моей инструкции if, я получаю сообщение об ошибке?

ответ

2

Похоже, что ваш драйвер базы данных возвращает время в формате, который отсутствует в RFC3339. Вместо того чтобы использовать

timeStamp, err := time.Parse(time.RFC3339, sTimeStamp) 

попробовать с помощью

timeStamp, err := time.Parse("2006-01-02 15:04:05", sTimeStamp) 

важная вещь, чтобы помнить о том, что сама база данных не будет хранить сырые строки на всех, RFC3339 или иным образом. Он имеет собственное внутреннее представление времени, и когда вы запрашиваете его, ценность, которую вы получаете, зависит от того, как этот db желает передать его вам. В этом случае он выбирается в несколько другом формате, который должна быть зафиксирована в форматированной строке, которую я вставил выше (той, которая начинается с «2006-01-02 ...»). И да, в Go, строки формата даты выглядят как сами даты.