2013-04-08 5 views
3

어떻게 작동하는지 설명 할 수 있습니까? 나는 사용자 입력과 SQL 서버에서 DateTime을 비교해야합니다.엔터티 프레임 워크가있는 DateTime 형식

다음

어떤 메신저를 찾는 예 : 속성이 날짜입니다

DateTime[] dates = { DateTime.Now, DateTime.UtcNow}; 
Console.WriteLine(dates.Where(x=>x < DateTime.Now));//i need to know if they are the same without convert them in string. 
Console.Read(); 

임 사용하는 엔티티 프레임 워크와 엔티티 클래스 날짜와 내가 말한대로 사용자의 입력과, 그 비교해야 내가 찾은 유일한 해결책은 CreateDate 함수였습니다. 아시겠지만 저는 Post 값을 Date 속성과 직접 비교할 수 없습니다.

db.dates.Where(x=>x.StartDate < start_date)//PROBLEM!! 

이유 : 예

db.dates.Where(x=>x.StartDate < "2012-02-13 00:00:00.000")//error, cannot compare datetime with string 

그래서, 내가

DateTime star_date = Convert.ToDateTime("2012-02-13 00:00:00.000"); 

날짜 시간

로 값을 변환 시도하고 가자, 다시 비교할 수 있습니다?

2012-02-13 12:00:00 am 

하지만 데이터베이스에, 말의 값을 가지고 시작 날짜 필드는 다음과 같습니다 : 음, START_DATE의 출력은 비교할 때

2012-02-13 00:00:00.000//all have those zeros at the end 

어떻게 내가 그 보관할 수 있습니다 날짜, 입력 날짜는 2012-02-13 00:00:00.000 형식입니까?

무엇을 사용해야할지 신경 쓰지 않고 동일한 형식과 동일한 데이터 형식 만 있으면됩니다.

답변

4

난 그냥 같은 형식을

없음이 필요합니다, 당신은하지 않습니다. 가장 적절한 데이터 형식 인 DateTime (또는 아마도 DateTimeOffset)이 필요하므로 문자열 형식을 잊어 버릴 필요가 있습니다.

"2012-02-13 12:00:00 am"은 "2012-02-13 00 : 00 : 00.000"으로 표시 될 수있는 값의 텍스트 표현입니다. 둘 다 2012 년 2 월 13 일 자정을 나타냅니다. 데이터베이스 필드가 적절하면 DateTime 유형이므로 아무 문제가 없습니다. 은 형식에 대해 걱정할 필요가 없습니다.

은 값이 UTC인지 로컬 시간인지에 대해 걱정할 필요가 있지만 별개의 문제입니다.

(나는 개인적으로 DateTime.Parse 사용하거나 오히려 Convert.ToDateTime보다는 DateTime.ParseExact,하지만 약간 다른 문제입니다 것입니다.) 당신이 날짜 시간 작업 할 때 당신이 날짜를 사용하고자하고 있다면, 먼저 파악해야

+0

그러나 여기 또 다른 문제가 있습니다. 입력 할 형식을 지정하려고하면 결과가 문자열이됩니다. 예 : 문자열 correct_date = date.ToString ("dd/mm/yyyy"). 형식을 사용하지 않고 값을 문자열로 변환하는 방법은 무엇입니까? –

+0

@ user2195741 : 물론, 포맷 할 때 문자열로 변환해야합니다. 하지만 귀하의 질문에 * 쿼리 * 수행하는 방법, 그리고 당신을 위해 서식을 필요가 없습니다. –

0

비교할 시간. 시간을 포함 시키려면 Date.Now 변수를 초기화해야합니다. 시간을 포함시키지 않으려면 데이터의 날짜 부분을 비교 한 다음 날짜를 사용해야합니다. 오늘.

  • 날짜.이제에는 항상 함수가 호출 된 현재 시간이 포함됩니다.
  • 날짜. 오늘은 항상 00:00:00에 시간을 설정하므로 날짜를 비교할 때 방해받지 않습니다.

코드를 체크인해야하는 첫 번째 일은 Date.Today 만 사용하는지 확인하는 것입니다.

예를 볼 때 어떤 문제도 보이지 않습니다.

그래서,

날짜 시간에 값을 변환하려고

날짜 시간 star_date = Convert.ToDateTime ("2012-02-13 00 : 00 : 00.000");

그리고 갈 수는 다시 비교할 수 있습니다 :

db.dates.Where (X => x.StartDate < 시작일) // 문제를!

왜? 음, START_DATE의 출력은 다음과 같습니다

2012-02-13 오전 12시 0분 0초

당신이 x.StartDate < 시작일을 비교할 때, 어떤 데이터 때문에이없는 것이 정상입니다 "2012-02-13 12:00:00"은 "2012-02-13 00 : 00 : 00.000"과 같습니다. 귀하의 날짜가 동일하기 때문에 쿼리가 데이터를 반환하지 않는 것이 정상입니다.

관련 문제