Programing

문자열이 유효한 DateTime "형식 dd / MM / yyyy"로 인식되지 않았습니다.

lottogame 2020. 6. 5. 08:02
반응형

문자열이 유효한 DateTime "형식 dd / MM / yyyy"로 인식되지 않았습니다.


문자열 형식의 값을 format을 사용하여 날짜 유형으로 변환하려고합니다 dd/MM/yyyy.

this.Text="22/11/2009";

DateTime date = DateTime.Parse(this.Text);

무엇이 문제입니까? 요청하는 두 번째 재정의가 있습니다 IFormatProvider. 이게 뭐야? 나는이 통과해야합니까? 그렇다면이 경우에 어떻게 사용합니까?

편집하다

의 차이점은 무엇입니까 Parse와는 ParseExact?

편집 2

Slaks와 Sam의 대답은 모두 나를 위해 일하고 있습니다. 현재 사용자는 입력을하고 있지만 이것은 maskTextbox를 사용하여 유효하다는 것을 보증합니다.

유형 안전, 성능 또는 기분이 좋은 것과 같은 모든 측면을 고려하면 어떤 대답이 더 낫습니까?


사용하십시오 DateTime.ParseExact.

this.Text="22/11/2009";

DateTime date = DateTime.ParseExact(this.Text, "dd/MM/yyyy", null);

입력 ParseExact한 형식과 정확히 일치하는 날짜를 구문 분석하는 을 호출해야합니다 .

예를 들면 다음과 같습니다.

DateTime date = DateTime.ParseExact(this.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture);

IFormatProvider매개 변수는 날짜를 구문 분석하는 데 사용할 문화권을 지정합니다.
문자열이 사용자로부터 온 경우가 아니면를 전달해야합니다 CultureInfo.InvariantCulture.
문자열이 사용자로부터 온 경우 사용자 CultureInfo.CurrentCulture가 제어판의 국가 별 옵션에서 지정한 설정을 사용하여 전달해야합니다 .


문화권마다 날짜 형식이 다르기 때문에 DateTime의 문자열 표현을 구문 분석하는 것은 까다로운 작업입니다. .Net은 이러한 날짜 형식을 알고 있으며 System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat전화를 걸면 현재 문화권에서 날짜 형식을 가져옵니다 DateTime.Parse(this.Text).

예를 들어 문자열 "22/11/2009"는 미국 (en-US) ShortDatePattern 과 일치하지 않지만 프랑스 (fr-FR)와 일치합니다.

이제 DateTime.ParseExact예상 한 정확한 형식 문자열을 호출 하여 전달하거나 적절한 문화권을 전달 DateTime.Parse하여 날짜를 구문 분석 할 수 있습니다.

예를 들어 날짜를 올바르게 구문 분석합니다.

DateTime.Parse( "22/11/2009", CultureInfo.CreateSpecificCulture("fr-FR") );

물론, 무작위로 프랑스를 선택하는 것이 아니라 자신의 필요에 맞는 것을 선택해야합니다.

당신이 알아 내야 할 것은 무엇 System.Threading.Thread.CurrentThread.CurrentCulture으로 설정되어 있으며, 그것이 예상되는 것과 다른지 여부입니다.


위의 솔루션이 효과적이지만 다음을 사용하여 webconfig 파일을 수정할 수도 있습니다.

<configuration>
   <system.web>
     <globalization culture="en-GB"/>
   </system.web>
</configuration>

참고 : 생산 기계와 로컬 기계에서 다른 날짜 시간 형식


다음과 같이 특정 날짜 형식의 문화권을 지정해야 할 수도 있습니다.

    Thread.CurrentThread.CurrentCulture = new CultureInfo("en-GB"); //dd/MM/yyyy

    this.Text="22/11/2009";

    DateTime date = DateTime.Parse(this.Text);

자세한 내용은 여기로 이동하십시오 :

http://msdn.microsoft.com/en-us/library/5hh873ya.aspx


많은 시간을 보낸 후 문제를 해결했습니다.

 string strDate = PreocessDate(data);
 string[] dateString = strDate.Split('/');
 DateTime enter_date = Convert.ToDateTime(dateString[1]+"/"+dateString[0]+"/"+dateString[2]);

이 참조를 기반으로 다음 접근 방식이 저에게 효과적이었습니다.

// e.g. format = "dd/MM/yyyy", dateString = "10/07/2017" 
var formatInfo = new DateTimeFormatInfo()
{
     ShortDatePattern = format
};
date = Convert.ToDateTime(dateString, formatInfo);

문자열을 datetime으로 변환하려면 이것을 사용하십시오.

Datetime DT = DateTime.ParseExact(STRDATE,"dd/MM/yyyy",System.Globalization.CultureInfo.CurrentUICulture.DateTimeFormat)

private DateTime ConvertToDateTime(string strDateTime)
{
DateTime dtFinaldate; string sDateTime;
try { dtFinaldate = Convert.ToDateTime(strDateTime); }
catch (Exception e)
{
string[] sDate = strDateTime.Split('/');
sDateTime = sDate[1] + '/' + sDate[0] + '/' + sDate[2];
dtFinaldate = Convert.ToDateTime(sDateTime);
}
return dtFinaldate;
}

위의 누군가가 문자열 매개 변수로 보낼 수 있지만 예를 들어 '20130121'과 같은 형식이어야하며 컨트롤에서 직접 가져 와서 해당 형식으로 변환 할 수 있습니다. 예를 들어 다음과 같은 텍스트 상자에서 얻을 수 있습니다.

date = datetextbox.text; // date is going to be something like: "2013-01-21 12:00:00am"

그것을 '20130121'로 변환하려면 다음을 사용하십시오.

date = date.Substring(6, 4) + date.Substring(3, 2) + date.Substring(0, 2);

SQL이이를 변환하여 데이터베이스에 넣을 수 있도록합니다.


당신은 또한 사용할 수 있습니다

this.Text = "22112009";
DateTime newDateTime = new DateTime(Convert.ToInt32(this.Text.Substring(4, 4)), // Year
                                    Convert.ToInt32(this.Text.Substring(2,2)), // Month
                                    Convert.ToInt32(this.Text.Substring(0,2)));// Day

코드 아래에서 나를 위해 일했습니다.

DateTime date = DateTime.Parse(this.Text, CultureInfo.CreateSpecificCulture("fr-FR"));

네임 스페이스

using System.Globalization;

수동 변경 :

string s = date.Substring(3, 2) +"/" + date.Substring(0, 2) + "/" + date.Substring(6, 4);

2015 년 11 월 22 일부터 2015 년 11 월 22 일에 변환됩니다.

참고 URL : https://stackoverflow.com/questions/2193012/string-was-not-recognized-as-a-valid-datetime-format-dd-mm-yyyy

반응형