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

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

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-06 10:43:02315검색

How to Unmarshal Incorrectly Formatted Datetimes in Go?

잘못된 형식의 날짜/시간 역마샬링

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

사용자 정의 역마샬링 솔루션

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

<code class="go">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
}</code>

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

구조체 통합

이 유형을 구조체에 통합하려면 다음을 정의하세요.

<code class="go">type Test struct {
    Time MyTime `json:"time"`
}</code>

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

시간 형식에 대한 참고 사항

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

위 내용은 Go에서 잘못된 형식의 날짜/시간을 역정렬화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.