2014-06-25 3 views
2

Я пытаюсь parse строку как время с, но, к сожалению, идут получает неправильный месяц (январь вместо июня)time.parse: почему голанг неправильно анализирует время?

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+01:00", t) 

    fmt.Printf("t was %v and tc was %v", t, tc) 

} 

Play

ответ

10

Проблема в том, что смещение ваш часовой пояс плохо определены в расположение: опорное смещение -0700. Вы определили ваш как +01:00, так что 01 интерпретируется как месяц и стирает ранее определенный. И поскольку ваше рабочее смещение равно 01, оно анализируется как январь.

Следующий пример работает для меня playground

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) 

} 
+0

Если я изменю с 2006 по 2003 год, он не смог снова проанализировать. Зачем? https://play.golang.org/p/mv8kD63O4k –

+0

Потому что строка за год '2006'. – Elwinar

4

Ваша строка макета неверен. Числа в строке макета имеют специальные значения, и вы используете 1 дважды: один раз в месяц и один раз в части часового пояса. Часовой пояс в строке, которую вы обрабатываете, составляет 01:00, поэтому вы сохраняете 1 в месяц. Это объясняет, почему месяц назад был месяц (первый месяц).

Исправленная строка макета 2006-01-02T15:04:05.000-07:00. Или, если вы довольны использованием Z для представления UTC, может потребоваться константа time.RFC3339.

Смежные вопросы