2010-05-25 3 views
1

"28/05/2010"이라고 말하면 개체에 문자열 값이 나타납니다. 나는 그것을 DateTime으로 변환하는 동안 예외를 던지고있다 :개체를 C에서 datetime으로 변환하는 중 #

문자열이 유효한 DateTime으로 인식되지 않았다.

코드입니다 :

object obj = ((Excel.Range)worksheet.Cells[iRowindex, colIndex_q17]).Value2; 
Type type = obj.GetType(); 
string strDate3 = string.Empty; 
double dbl = 0.0; 

if (type == typeof(System.Double)) 
{ 
    dbl = Convert.ToDouble(((Excel.Range)worksheet.Cells[iRowindex, colIndex_q17]).Value2); 
    strDate3 = DateTime.FromOADate(dbl).ToShortDateString(); 
} 
else 
{ 
    DateTime dt = new DateTime().Date; 
    //////////dt = DateTime.Parse(Convert.ToString(obj)); 
    **dt = Convert.ToDateTime(obj).Date;** 
    strDate3 = dt.ToShortDateString(); 
} 

더블 스타 "**"라인은 예외를 가져옵니다.

답변

1

예외는 SQL Server와 응용 프로그램에 대해 서로 다른 culture를 설정했기 때문입니다. 따라서 데이터베이스에서 문자열을 "dd/MM/yyyy"로 가져오고이 값은 "MM/dd/yyyy"로 구문 분석됩니다. 28은 유효하지 않은 월이므로 예외가 발생합니다. 올바른 가치를 얻으려면 DateTime.ParseExact(dateString, "dd/MM/yyyy", CultureInfo.InvariantCulture);을 사용하거나 동일한 문화권을 사용하십시오.

업데이트 : 제어판 -> 지역 및 언어에서 창 설정을 확인할 수 있습니다. SQL 서버 문화 설정 및 여기에 응용 프로그램에 대한 문화를 정의하는 방법은 좋은 설명입니다 http://alainrivas.blogspot.com/2008/09/aspnet-and-sql-server-globalization.html

+0

네가 맞다고 생각해. 고마워요. 어떻게 이걸 설정할 수 있니? –

+0

culture date formate를 변경하는 방법은 무엇입니까? –

+0

업데이트 된 답변보기 – Thea

1

DateTime.ParseExact을 사용하고 형식 문자열을 dd/MM/yyyy로 지정하십시오.

+0

+1 그 라인이 주석 처리되었으므로 OP의 원래 의도라고 생각합니다. 실제로 누락 된 것은 모두 형식입니다 공급자. – James

+0

아니요 작동하지 않습니다 –

+0

수정 된 코드와 질문에 새 오류를 추가하십시오. –

관련 문제