날짜를 올바르게 저장하는 방법은?
날짜를 저장하려고 합니다(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
'sourcecode' 카테고리의 다른 글
스프링 부트 액추에이터 상태 끝점을 사용자 지정 끝점으로 변경 (0) | 2023.06.28 |
---|---|
Spring-boot에서 정적 웹 콘텐츠를 추가하는 방법 (0) | 2023.06.28 |
SQL Server 데이터베이스의 모든 스키마 목록을 가져오려면 어떻게 합니까? (0) | 2023.06.28 |
스프링 부트 연속 빌드로 실행 (0) | 2023.06.28 |
테이블 정의를 표시하기 위한 T-SQL 쿼리? (0) | 2023.06.28 |