2013-05-14 3 views
0

Go에서 문자열을 time.Time으로 변환하는 동안 시간 패키지의 Parse 메서드를 사용하면 예상 결과가 반환되지 않습니다. 시간대에 문제가있는 것 같습니다. UTC로 날짜와 시간을 결합한 ISO 8601로 변경하고 싶습니다.time.Parse behavior

package main 

import (
    "fmt" 
    "time" 
) 

func main() { 
    const longForm = "2013-05-13T18:41:34.848Z" 
    //even this is not working 
    //const longForm = "2013-05-13 18:41:34.848 -0700 PDT" 
    t, _ := time.Parse(longForm, "2013-05-13 18:41:34.848 -0700 PDT") 
    fmt.Println(t) 
    //outputs 0001-01-01 00:00:00 +0000 UTC 
} 

미리 감사드립니다.

답변

2

time.Parsespecial values for time formatting를 사용하고, 형식을 기대하는 것은 그 값이 전달된다.

올바른 값을 전달하면 올바른 방식으로 시간이 분석됩니다. 답변에 대한

그래서 01로 2006 년, 월로 전달하고 그런 식으로 계속 ...

package main 

import (
    "fmt" 
    "time" 
) 

func main() { 
    const longForm = "2006-01-02 15:04:05.000 -0700 PDT" 
    t, err := time.Parse(longForm, "2013-05-13 18:41:34.848 -0700 PDT") 
    fmt.Println(t.UTC(), err) 
    //outputs 2013-05-14 01:41:34.848 +0000 UTC <nil> 
} 
+0

'2017-Oct-14'라는 값을 바꾸면 왜 작동하지 않는지 궁금합니다. 설명 해줘서 고마워. – abhijithda

6

서식 문자열 longForm이 올바르지 않습니다. You would know that if you would have not been ignoring the returned error. docs 인용하기 :

이들은 Time.Format 및 Time.Parse에 사용하기 위해 미리 정의 된 레이아웃입니다. 레이아웃에 사용 된 기준 시간은 다음 MST 때문에 유닉스 시간 1136239445.이다

Mon Jan 2 15:04:05 MST 2006 

는 GMT-0700, 기준 시간이 고려 될 수있다

01/02 03:04:05PM '06 -0700 

로서

자신의 형식을 정의하려면 참조 시간이 형식화 된 모양을 적어 둡니다. 예를 들어 ANSIC, StampMicro 또는 Kitchen과 같은 상수 값을 참조하십시오.

package main 

import (
     "fmt" 
     "log" 
     "time" 
) 

func main() { 
     const longForm = "2006-01-02 15:04:05 -0700" 
     t, err := time.Parse(longForm, "2013-05-13 18:41:34.848 -0700") 
     if err != nil { 
       log.Fatal(err) 
     } 
     fmt.Println(t) 
} 
Playground


출력 :

2013-05-13 01:41:34.848 +0000 UTC 
+0

감사하지만, 그것은 (2013년 5월 13일 01 찾고 형식 i'am 아니다 : 41 : 34.848 +0000 UTC), 제공된 형식 ("2006-01-02 15:04:05 -0700")이 아니며 무시되는 사항이 없습니다. 답변을 업데이트하면 기쁠 것입니다. – siesta