2016-08-15 10 views
0

일부 또는 전체 날짜로 검색 할 수있는 필터 필드가 있습니다. 즉, 사용자가 입력하려는 방식에 따라 TryParseExact가 보이지 않습니다. 최선의 선택과 같습니다.DateTime.TryParse는 yyyy에서만 실패합니다

DateTime.TryParse(fromDate.Text, CultureInfo.InvariantCulture, DateTimeStyles.None, out dateFromValue) 

은 YYYY 문자열하지만 모든 구문 분석 :

문제는 다음과 같은 코드가 있다는 것입니다. 예 : "05/1980"및 "1980/05"는 {1/05/1980 12:00:00 AM}으로 인식되지만 "1980"은 실패합니다.

필자는 파서가 모든 것이 4 자리 시퀀스 일 때 yyyy와 ffff를 구분할 방법이 없다고 생각하지만이 작업을해야합니다.

if(!DateTime.TryParse("1980", CultureInfo.InvariantCulture, DateTimeStyles.None, out date)) 
    DateTime.TryParseExact("1980","yyyy",CultureInfo.InvariantCulture, DateTimeStyles.None, out date); 

또는 내가 잘못하고있는 것보다 더 우아한 방법일까요?

미리 감사드립니다.

답변

2

나는 달과 요일이 모호하기 때문에 일년만으로 DateTime.Parse를 사용할 수 없다고 생각합니다. 특정 날짜 형식의 DateTime.ParseExact 또는 DateTime.TryParseExact를 대신 사용하십시오.

if 조건이 나에게 잘못되었습니다. 두 조건을 어떻게 조합합니까?

if(!DateTime.TryParse("1980", CultureInfo.InvariantCulture, DateTimeStyles.None, out date)) 
DateTime.TryParseExact("1980","yyyy",CultureInfo.InvariantCulture, DateTimeStyles.None, out date); 

이 있었어야 :

if(DateTime.TryParse("1980", CultureInfo.InvariantCulture, DateTimeStyles.None, out date) || 
DateTime.TryParseExact("1980","yyyy",CultureInfo.InvariantCulture, DateTimeStyles.None, out date)) 
// If the first parse success, use that. Otherwise, try to parse the year only with the parseexact. 
// Notice the || and the first condition needs to be positive. 
+0

좋은 지적 보인다 - 내가 더 조심해야한다 언제 copypasting! 그것을 지적 해 주셔서 감사합니다 :) 이 특별한 경우에는 TryParse를 사용하여 빠진 날짜와 월을 추측 할 수 있습니다 (예 : 1 월 1 일 등). –

0

부분 일치가 가장 쉬운 방법은 날짜를 문자열로 처리하고 날짜 형식에 의존하지 않고 문자열 일치를 사용하는 것입니다.

+0

내가,하지만 작동 _mostly_ TryParse는, 그래서 _fully_ 작업 만들려고 노력하는 점을 고려 봤는데 정말 유혹 : –