2010-04-11 2 views
3

나는 000011990이 날짜 무효화 될 수있다 (예) (I) 그래서 내가 모두를 확인해야C 번호 - 정규 표현식의 유효성을 검사 날짜와 시간

The received Date format is YYYYMMDD (string) (there is no ":" ,"-","/" to 
separate Year month and date). 

The received time format is HH:MM (24 Hour clock). 

파일 CSV에서 날짜와 시간을 수신 (II) 77 : 90 시간은 일 수 있습니다.

질문은,

정규식에 적합한 후보 그래서 (또는) 에게 그것을 달성하기 위해 다른 방법이 있습니까? DateTime.parse

+1

A * 3 * -digit 년? 오타 또는 고의? – Joey

+0

유감스럽게도 4 자리수 연도 – user274364

답변

9

당신은 DateTime.TryParseExact 찾고 :

string source = ...; 
DateTime date; 
if (!DateTime.TryParseExact(source, 
          "yyyyMMdd", 
          CultureInfo.InvariantCulture, 
          DateTimeStyles.None, 
          out date)) { 
    //Error! 
} 

당신은 형식 문자열 "HH:mm"로, 시간을 확인하기 위해 같은 코드를 사용할 수 있습니다.

+2

+1 나는 환하게 웃을 것이다. ... 왜 내가 전에 그것을 보지 못했습니까 ?? 그것을 지적 주셔서 감사합니다 !! –

+0

Opps! 훌륭한 ! 대단히 감사합니다. – user274364

2

나는 더 좋은 방법은 C#을에 내장 된 날짜 형식의 클래스를 사용하는 것입니다 생각 DateTime 변수는 실패하지만 실패 할 경우 예외를 throw하지 않습니다. 문자열이 유효한 DateTime으로 인식되지 않으면 false을 반환합니다.

4

당신의 가장 쉬운 해결책은 당신의 문자열을 변환하려고 시도합니다

DateTime output; 
if(!DateTime.TryParse(yourstring, out output)) 
{ 
    // string is not a valid DateTime format 
} 

DateTime.TryParse을 사용하는 것입니다 :

+0

'ParseExact'는 형식을 미리 알고'TryParse' ('Parse'와 같이)가'DateTime'이 인식 할 수있는 것이 무엇이든지 시도 할 수 있기 때문에 더 좋은 선택이 될 수 있습니다. 해야 할 것. – Joey

+0

글쎄, 질문은 아마도 더 많은 내용을 담고있을 것입니다.»날짜 형식이 이전에 지정되지 않았 으면 오류입니까?«Postel의 법을 위반할 수도 있지만, 일부 경우 ParseExact는 여전히 단일 유효 표현. (어느 imho는 항상 ISO 8601이어야하지만 그저 내 비틀어 진 괴상한 마음 일 것입니다 :-)) – Joey

+0

@Johannes Rössel : 또는 SLaks의 대답을보십시오 - TryParse 대신에'TryParseExact'를 사용하십시오 .... –

1

DateTime 구조체의 TryParse 메서드 중 하나를 사용할 수 있습니다. 파싱에 실패하면 그들은 거짓을 반환 할 것입니다.

또 다른 옵션은 ParseExact 메서드를 사용하지만 형식 공급자를 지정해야하는 경우에 사용합니다.

+0

'null을 전달할 수 있습니다 '형식 제공자로서. – Joey

+0

@Johannes Rössel - 공정한 포인트 :) – Oded