"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Go에서 잘못된 형식의 날짜/시간을 역정렬화하는 방법은 무엇입니까?

Go에서 잘못된 형식의 날짜/시간을 역정렬화하는 방법은 무엇입니까?

2024-11-09에 게시됨
검색:641

How to Unmarshal Incorrectly Formatted Datetimes in Go?

잘못된 형식의 날짜/시간 비정렬화

Go에서 JSON 날짜 시간을 비정렬화할 때 JSON에 제공된 시간대 오프셋의 형식이 잘못된 경우 일반적인 문제가 발생합니다. . RFC3339에 따르면 예상되는 형식은 콜론이 있는 02:00이지만 일부 소스에서는 콜론 없이 0200으로 출력할 수 있습니다.

Custom Unmarshaling Solution

To 이러한 불일치를 처리하려면 두 가지 형식을 모두 지원하는 사용자 정의된 시간 필드 유형을 정의할 수 있습니다.

type MyTime struct {
    time.Time
}

func (self *MyTime) UnmarshalJSON(b []byte) (err error) {
    s := string(b)
    s = s[1:len(s)-1] // Remove the quotes

    t, err := time.Parse(time.RFC3339Nano, s)
    if err != nil {
        t, err = time.Parse("2006-01-02T15:04:05.999999999Z0700", s)
    }
    self.Time = t
    return
}

이 솔루션은 UnmarshalJSON 메서드를 활용하여 먼저 JSON 문자열에서 따옴표를 제거합니다. 그런 다음 표준 RFC3339Nano 형식을 사용하여 날짜/시간 구문 분석을 시도합니다. 실패하면 시간대 오프셋에서 콜론을 제거하는 수정된 형식을 구문 분석하는 것으로 대체됩니다.

구조체 통합

이 유형을 구조체에 통합하려면 다음을 정의합니다. 다음과 같습니다:

type Test struct {
    Time MyTime `json:"time"`
}

이를 사용하면 시간대 오프셋이 콜론으로 구분되었는지 여부에 관계없이 시간 필드가 올바른 날짜와 시간으로 채워져 JSON을 테스트 구조로 역마샬링할 수 있습니다.

시간 형식에 대한 참고 사항

시간 형식 문자열에 2006년을 사용하는 것은 Go 초기 릴리스의 역사적인 인공물입니다. 실질적인 의미가 없으며 날짜/시간의 정확성이나 형식에 영향을 주지 않습니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3