time.parse: почему golang неправильно разбирает время?
2 ответа
Проблема в том, что смещение часового пояса в макете плохо определено: эталонное смещение -0700
, Вы определили как +01:00
, Итак 01
интерпретируется как месяц и стирает ранее определенный. И как ваше рабочее смещение 01
а также он анализируется как январь.
Следующий пример работает для меня площадка
package main
import "fmt"
import "time"
func main() {
t := "2014-06-23T20:29:39.688+01:00"
tc, _ := time.Parse("2006-01-02T15:04:05.000-07:00", t)
fmt.Printf("t was %v and tc was %v", t, tc)
}
Ваша строка макета неверна. Числа в строке макета имеют особые значения, и вы используете 1
дважды: один раз в месячной части и один раз в части часового пояса. Часовой пояс в строке, которую вы анализируете 01:00
так что вы храните 1
в месяц. Это объясняет, почему возвращаемый месяц был январь (первый месяц).
Исправленная строка макета 2006-01-02T15:04:05.000-07:00
, Или, если вы довольны использованием Z
представлять UTC, time.RFC3339
константа может быть уместной.