>백엔드 개발 >Golang >MongoDB 문자열 날짜를 이동 시간으로 변환하는 방법은 무엇입니까?

MongoDB 문자열 날짜를 이동 시간으로 변환하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-16 14:54:02454검색

How to Convert MongoDB String Dates to Go Time?

Go에서 MongoDB 액세스: MongoDB 문자열 날짜를 Go 시간으로 변환

코드 스니펫을 보면 Go에서 MongoDB에 액세스하고 다음과 같은 문제가 발생함을 알 수 있습니다. MongoDB 문자열 날짜를 Go Time으로 변환하는 데 어려움이 있습니다. 제공된 clientConfigData 구조체에는 MongoDB의 저장 형식과 일치하는 문자열로 선언된 EndDate 필드가 포함되어 있습니다. 그러나 이 날짜를 Go Time 값으로 액세스해야 합니다.

사용자 정의 마샬링 및 역마샬링

이 변환을 수행하려면 사용자 정의 마샬링 및 역마샬링 논리 구현을 고려하세요. bson.Getter 및 bson.Setter 인터페이스를 구현하면 마샬링 및 역마샬링 프로세스 중 값 변환을 제어할 수 있습니다.

확장 clientConfigData 구조체

clientConfigData 구조체 확장 time.Time 유형의 추가 EndDate 필드를 포함하려면(원하는 값 유형):

type clientConfigData struct {
    SMTPAssoc  int       `bson:"smtp_assoc"`
    PlanType   string    `bson:"plan_type"`
    EndDateStr string    `bson:"end_date"`
    EndDate    time.Time `bson:"-"` // bson tag "-" excludes this field from MongoDB
}

사용자 정의 마샬링 및 역마샬링 기능

클라이언트ConfigData에 대한 사용자 정의 마샬링 및 역마샬링 기능 정의 struct:

const endDateLayout = "2006-01-02 15:04:05" // Customizable date layout

func (c *clientConfigData) SetBSON(raw bson.Raw) (err error) {
    type my clientConfigData
    if err = raw.Unmarshal((*my)(c)); err != nil {
        return
    }
    c.EndDate, err = time.Parse(endDateLayout, c.EndDateStr)
    return
}

func (c *clientConfigData) GetBSON() (interface{}, error) {
    c.EndDateStr = c.EndDate.Format(endDateLayout)
    type my *clientConfigData
    return my(c), nil
}

설명

  • SetBSON(): 원시 MongoDB 값으로 구조체를 채우고 EndDateStr 필드를 유형의 EndDate 필드로 구문 분석합니다. time.Time.
  • GetBSON(): EndDateStr을 설정합니다. 필드를 EndDate 필드에서 삭제하고 저장을 위해 clientConfigData 구조체를 반환합니다.

새 필드 사용

이제 EndDate 필드를 사용하여 날짜에 액세스할 수 있습니다. 이동 시간 값으로. 사용자 정의 마샬링 및 역마샬링 논리는 MongoDB에서 데이터를 읽고 저장할 때 문자열 형식과 시간 형식 간에 자동으로 변환됩니다.

위 내용은 MongoDB 문자열 날짜를 이동 시간으로 변환하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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