2012-04-29 6 views
1

"07:30 am"형식으로 시간을 가져와야합니다 (대/소문자 구분 안 함). 나는 "07:30 am"과 같은 형식의 파일을 읽었습니다. 결국 나는 DateTime을 생성 할 것이므로 am/pm 부분 앞에 공백을 넣을 필요가있다.문자열 문자열 구문 분석

if(startString.IndexOfAny("ap".ToCharArray()) != -1) 
{ 

} 

이 작업을 수행하는 가장 좋은 방법은 무엇입니까 :

나는이를 사용하여는 A의 발생 또는 페이지를 검색 할 수 있습니다? 나는 공간으로 연결될 수있는 두 개의 문자열로 끝날 것이라고 생각하고 있나? Split을 위의 스 니펫과 함께 사용하여이 작업을 수행 할 수 있습니까?

UPDATE : 나는 분, AM/PM 사이의 날짜 시간의 공간으로 끝낼 필요가 나는 정규 표현식을 사용하지 않으

. 지금까지 내가 여기 해봤 아무것도 나에게 부여하지 않습니다 그 ...

내가 처리해야 실제 입력이 형식에 :

RecDate "2012년 4월 30일"

RecTime : "05:30 am"

오전/오후 부분 앞에 공백이있는 새 DateTime 개체를 만들어야합니다.

답변

5

두 쉽게 선택할 수 있습니다

  1. 사용 정규식이 서식 수정 :

    문자열 newTime = Regex.Replace (startString를 @ "(< = [01] \ D :를 [ 0-5] \ d) (? = [ap] m) "," ");

    날짜 시간 NEWVALUE = DateTime.ParseExact ( startString, "시 : 분 : mmtt" CultureInfo.InvariantCulture)있는 그대로

  2. 사용 DateTime.ParseExact 그냥 시간을 가져옵니다;

두 번째 방법에는 부분적인 부분이 있습니다.

형식으로 mmtt 사이에 구분 기호가 정의되어 있지 않으므로 Invariant Culture를 사용해야합니다.

+0

두 번째 방법에 대한 그러한 서명 - 내가 공급자를 통과 것; 어느 것이 미국 영어를위한 올바른 것입니까? 또한 두 번째 인수에 대해 오류가 발생합니다. "식별자가 필요합니다"? – IrishChieftain

+0

@IrishChieftain'CultureInfo'는'IFormatProvider'를 구현하므로'new CultureInfo ("en-US")'와 같은 것이 트릭을해야합니다. – phoog

+0

또한 Regex : "인식 할 수없는 이스케이프 문자열"의 "d"에 대한 오류가 발생했습니다 ... – IrishChieftain