2016-06-23 2 views
0

나는 이런 식으로 현재 시간을 저장하는 경우 : Golang/mgo : mongodb에 날짜 (ISODate 제외)를 저장하려면 어떻게해야합니까?

type Test struct { 
    Id string `bson:"id" json:"id,omitempty"` 
    TestTime time.Time `bson:"testTime" json:"testTime,omitempty"` 
} 
... 

t := Test { 
    Id : "TEST0001", 
    TestTime : time.Now(), 
} 
... 

c.Insert(t) 

그때 나는 그것을 검색 할 mongochef를 사용

{ 
    "_id" : ObjectId("576bc7a48114a14b47920d60"), 
    "id" : "TEST0001", 
    "testTime" : ISODate("2016-06-23T11:27:30.447+0000") 
} 

그래서, 기본적으로 산화 마그네슘 저장 ISODate, 내가 날짜를 저장할 수있는 방법을 ISODate하지?

답변

0

mgo는 자동으로 time.Time을 몽고 내부 날짜 데이터 형식 (source)으로 변환합니다 (실제로는 시간대 정보가없는 타임 스탬프이며 항상 UTC로 수정 됨). 다른 모든 기능은 수동으로 구현해야합니다.

당신은 산화 마그네슘이 제대로 (드) 패키지 mgo/bson에서 GetterSetter 인터페이스를 구현하여 유형을 직렬화 강제 할 수는 상당히 낮은 수준이 너무 조심입니다 생각했다.

0

this과 같이 시간대를 저장하는 사용자 지정 구조체를 정의해야합니다.

로딩 할 때 날짜 위치를 변경하는 사용자 정의 Unmashal을 정의 할 수 있습니다.

func (t *TimeWithTimezone) Unmarshal(in []byte, out interface{}) (err error) { 
    type decode TimeWithTimezone 
    var d decode 
    if err := bson.NewDecoder(in).Decode(&d); err != nil { 
     return err 
    } 
    loc, err := FixedZone(d.Timezone, d.Timezone) 
    if err != nil { 
     return fmt.Errorf("Invalid Timezone: %s", d.Timezone) 
    } 
    t.Time = d.Time.In(loc) 
    t.Timezone = d.Timezone 
    return nil 
} 

이와 비슷한 것이 트릭을 수행해야합니다. 테스트를 거치지 않아도됩니다.

관련 문제