2011-10-14 3 views
1

간단한 질문. 문자열을 날짜로 변환하려고합니다 (나중에 INSERT 명령에 넣기 위해). 내 문제는 내가 읽고있는 문자열이 항상 다르다는 것입니다 (어떤 형식이 될지는 규칙이 없습니다. 이는 사용자에 따라 다름).VB.NET - 날짜 변환을위한 문자열

나는 유래에 대한 코드와 같은 조각을 발견 :

DateTime myDate = 
    DateTime.ParseExact("2009-05-08 14:40:52,531", 
         "yyyy-MM-dd HH:mm:ss,fff", 
         System.Globalization.CultureInfo.InvariantCulture) 

을하지만 난 가져 가고 포맷의 종류를 알 수 없기 때문에 내 경우에는 작동하지 않습니다. 알려진 모든 형식을 검사하는 범용 가져 오기 기능이 있습니까? 지금 어떻게해야합니까? (나에게 약간의 힌트를 줘). 사전에 어떤 조언과 힌트를

감사합니다, 피트

+2

나는 보편적 인 기능이 가능하지 않다. 예를 들어 5/3/2011 5 월 3 일 또는 3 월 5 일이 예입니까? 당신이 사는 곳에 달려 있습니다. 또한 지원하는 형식을 좁혀 야 할 수도 있습니다. 예를 들어 "내일"을 유효한 날짜로 변환 할 수있게 하시겠습니까? – JohnFx

+2

문제는'2009-05-08'은'yyyy-MM-dd' 또는'yyyy-dd-MM' 일 수 있습니다 - 추가 정보없이 명확하게 그 문자열을 날짜로 변환 할 수 없습니다 ... –

+1

아니면 , 악화 : '05/06/07'. 그 중 어느 부분이 년, 월, 일입니까? 나는 그것이 일반적으로 세계의 일부에서 읽혀질 것이지만 최소한 4 가지 다른 날짜가 될 수있는 형식에 대한보다 엄격한 규칙이 없다는 것을 안다. –

답변

0

없음이 그러나 당신이 배열에 formats 가능한 정의하고 ParseExact 또는 TryParseExact 방법으로 전달할 수 있습니다 가능하지 않습니다.

Dim format() As String = {"dd-MM-yy", "dd/MM/yy"} 

Dim myDate As DateTime = DateTime.ParseExact("2009-05-08 14:40:52,531",format, 
         System.Globalization.CultureInfo.InvariantCulture)) 
+0

모든 형식을() 형식으로 넣은 다음 루프에서 테스트하고 적합하지 않은 경우 - 예외를 throw하는 것이 합리적입니까? – Pete

+0

@ Pete - 둘 이상의 형식이 적합한 경우 어떻게해야합니까? 첫 번째 작업을 수행합니까? 마지막 하나? –

+0

지금 당장 데이터베이스를 점검했습니다. 내 날짜 셀의 "datetime"형식을 사용하는 SQLCE를 사용합니다. stackoverflow에서 또 다른 게시물에서 나는 그것이 "dd-MM-yyyy HH : mm : ss.fff"라는 것을 읽었습니다. 1 이상이 맞으면, 나는 첫 번째 걸릴거야. 아니면 제가 여기에 붙여 놓은 패턴으로 받아 들일 수있는 것을 취할 것입니다. – Pete

1

사용자가 입력 한 날짜를 확인하지 않으면 (올바른 날짜인지 확인하기 위해) 사용자가 실수를 저지른 것입니다.

지역 주민을 고려하면 2011 년 1 월 2 일은 1 월 2 일 (아일랜드, 영국 & 유럽)이거나 2 월 1 일 (미국) 일 수 있습니다.

현지인을 무시하더라도 "Thursday 13/10/11"에 털이 많은 사람이 있는데, 13 일이 목요일입니다. 잘못 입력하면 "Friday 13/10/11"또는 그들은 2011 년 11 월 금요일 (2011 년 10 월 14 일 금요일) 또는 일부 금요일 인 것입니다.

그럼 "다음 목요일"을 입력하는 직관적 인 사용자를 얻을 수 있습니다. 당신?

그런 다음 오타가 발생합니다. 112 // 2011 년 11 월 2 일 또는 2011 년 1 월 12 일입니까?

너무 많이 잘못되었으므로 사용자 입력이 유효하도록하기 위해해야 ​​할 일은 무엇이든지해야하며 천국과 지구를 이동해야하지만 사용자가 데이터를 입력 할 때는이 작업을 수행하십시오.

+0

안녕하세요, 당신의 의견에 감사드립니다. 당신은 어느 정도는 맞지만, 제 경우에는 날짜를 엑셀 파일에서 가져옵니다.어쩌면 Excel 자체에 cultureinfo가 어딘가에 저장되어 있습니까? – Pete

+0

@Pete : 죄송합니다. Excelie는 말하지 않습니다. ( –

+0

@ 바이너리 - 1/2/2001은 어떻게 1 월 1 일이 될 수 있습니까? 그리고 2 월 2 일은 어떨까요? 아마도 어쩌면 오타일까요? –