sourcecode

날짜를 올바르게 저장하는 방법은?

copyscript 2023. 6. 28. 21:55
반응형

날짜를 올바르게 저장하는 방법은?

날짜를 저장하려고 합니다(C# 공식 드라이버 사용).

val = DateTime.Parse(value).Date; //Here date is {11/11/2011 12:00:00 AM}
var update = Update.Set("Date", val);
...

데이터베이스에서 날짜를 선택하면 값은 {11/10/2011 오후 10:00:00}입니다.

원하는 날짜만 저장하려면 어떻게 해야 합니까?

c# 드라이버는 기본적으로(추가 설정 없이) 로컬 날짜를 utc 날짜로 데이터베이스에 저장하지만(날짜 - 시간대 오프셋) 아무 작업 없이 다시 읽습니다(따라서 utc 날짜).

이로 인해 데이터베이스에서 날짜 시간을 로드할 때 2시간 내에 시차가 발생합니다(시간대 오프셋).deserialization 중에 mongodbc# 드라이버에게 UTC 날짜를 로컬 표준 시간대 날짜로 변환하는 두 가지 방법이 있습니다.

1.특정 날짜 필드의 속성을 통해:

[BsonDateTimeOptions(Kind = DateTimeKind.Local)]
public DateTime SomeDateProperty {get;set;}

2.모든 날짜/시간 필드에 대한 전역 설정(기본값:UtcInstance):

DateTimeSerializationOptions.Defaults = DateTimeSerializationOptions.LocalInstance;

#1 또는 #2를 수행하면 현지 날짜가 표시됩니다.

업데이트:


#2는 최신 드라이버 버전에서 더 이상 사용되지 않으므로 아래 코드를 사용하십시오.

BsonSerializer.RegisterSerializer(typeof(DateTime), 
             new DateTimeSerializer(DateTimeSerializationOptions.LocalInstance));

업데이트:


#2가 다시 변경되었습니다.

BsonSerializer.RegisterSerializer(typeof(DateTime), DateTimeSerializer.LocalInstance);

시간대 문제가 발생했습니다.날짜 개체가 UTC가 아닌 다른 시간대에 있거나(보기에는 2시간 앞서 있음) 기본 시간대가 UTC가 아닌 다른 시간대로 설정되어 있을 수 있습니다.드라이버는 날짜를 데이터베이스에 저장하기 전에 해당 시간대로 변환합니다.

일반적으로 역방향(데이터베이스에서 UTC 날짜 가져오기)은 원래 시간대로 변환해야 하기 때문에 이러한 사실을 알지 못합니다.사용 중인 드라이버에 문제가 있거나 C#이 올바르게 작동하려면 코드가 조금 더 필요할 수 있습니다.

날짜를 문자열로 저장하는 것은 일반적으로 날짜에 대한 범위 쿼리를 사용하지 않도록 설정하기 때문에 좋은 방법이 아닙니다.

Mongo는 모든 것을 UTC에 저장합니다. 당신의 날짜가 UTC일 경우에 도움이 될 것입니다.

val = DateTime.SpecifyKind(val , DateTimeKind.Utc);
var update = Update.Set("Date", val);

2.2.4.26이 다시 변경되었습니다.

BsonSerializer.RegisterSerializer(typeof(DateTime), DateTimeSerializer.LocalInstance);

내 경우에는[BsonDateTimeOptions(Kind = DateTimeKind.Local)]작동하지 않습니다.

제가 한 일은 아래와 같습니다.

    DateTime _someDateProperty ;
    public DateTime SomeDateProperty 
    {
        get { return _someDateProperty ; }
        set
        {
            _someDateProperty = new DateTime(value.Ticks, DateTimeKind.Local);
        }
    }

Mongodb 날짜 값은 날짜와 시간으로 구성된 "UTC 날짜 시간" 형식으로 저장됩니다.따라서 필드에 날짜를 단독으로 저장할 수 없습니다.대신 당신은 mongo에서 검색한 후 응용 프로그램 코드에서 날짜 부분만 얻을 수 있습니다.

c#과 같은

datevalue.ToString("MM/dd/yyyy");

또는

datevalue.ToShortDateString() 

언급URL : https://stackoverflow.com/questions/8063323/how-to-save-date-properly

반응형