유효한 형식을 거부하는 DateTime.TryParseExact ()
ASP.NET WebForms
페이지 에서 DateTime 값을 구문 분석하고 DateTime.TryParseExact()
있으며 제공된 형식 문자열 중 하나와 명확하게 일치하더라도 날짜 문자열이 메서드에 의해 계속 거부됩니다 .
집에있는 개발 머신에서는 실패한 것 같지만 프로덕션 서버에서는 작동하므로 로컬 날짜 설정이 관련되어 있다고 생각하고 있지만이 오류는 IFormatProvider (CultureInfo)
개체를 매개 변수로 제공하더라도 발생합니다.
코드는 다음과 같습니다.
DateTime startDate;
string[] formats = { "dd/MM/yyyy", "dd/M/yyyy", "d/M/yyyy", "d/MM/yyyy",
"dd/MM/yy", "dd/M/yy", "d/M/yy", "d/MM/yy"};
var errStart = row.FindControl("errStartDate"); //my date format error message
if (!DateTime.TryParseExact(txtStartDate.Text, formats, null, DateTimeStyles.None, out startDate))
{
errStart.Visible = true; //we get here even with a string like "20/08/2012"
return false;
}
else
{
errStart.Visible = false;
}
참고 null FormatProvider
위의 a 를 제공하고 있지만 이 매개 변수 CultureInfo
와 같은 객체를 제공 할 때 동일한 문제가 발생합니다 (CultureInfo provider = new CultureInfo("en-US"))
.
내가 무엇을 놓치고 있습니까?
시험:
DateTime.TryParseExact(txtStartDate.Text, formats,
System.Globalization.CultureInfo.InvariantCulture,
System.Globalization.DateTimeStyles.None, out startDate)
여기에서 몇 가지 사항을 확인할 수 있습니다.
- 올바르게 사용하고있는 날짜 형식. 에 대해 둘 이상의 형식을 제공 할 수 있습니다
DateTime.TryParseExact
. 여기 에서 사용할 수있는 전체 형식 목록을 확인 하십시오 . CultureInfo.InvariantCulture
문제를 추가 할 가능성이 더 높습니다. 따라서NULL
값 을 전달 하거나로 설정 하는 대신CultureInfo provider = new CultureInfo("en-US")
다음과 같이 작성할 수 있습니다. .if (!DateTime.TryParseExact(txtStartDate.Text, formats, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out startDate)) { //your condition fail code goes here return false; } else { //success code }
이것은 간단한 방법입니다. ParseExact 사용
CultureInfo provider = CultureInfo.InvariantCulture;
DateTime result;
dateString = "Sun 08 Jun 2013 8:30 AM -06:00";
format = "ddd dd MMM yyyy h:mm tt zzz";
result = DateTime.ParseExact(dateString, format, provider);
이것은 당신을 위해 작동합니다.
C # 7.0 사용해보기
var Dob= DateTime.TryParseExact(s: YourDateString,format: "yyyyMMdd",provider: null,style: 0,out var dt)
? dt : DateTime.Parse("1800-01-01");
string DemoLimit = "02/28/2018";
string pattern = "MM/dd/yyyy";
CultureInfo enUS = new CultureInfo("en-US");
DateTime.TryParseExact(DemoLimit, pattern, enUS,
DateTimeStyles.AdjustToUniversal, out datelimit);
자세한 내용은 https://msdn.microsoft.com/en-us/library/ms131044(v=vs.110).aspx
참조 URL : https://stackoverflow.com/questions/11999912/datetime-tryparseexact-rejecting-valid-formats
'developer tip' 카테고리의 다른 글
Expression 클래스의 목적은 무엇입니까? (0) | 2021.01.07 |
---|---|
디버깅하는 동안 Python 목록을 어떻게 호출합니까? (0) | 2021.01.07 |
Double에서 절대 값을 얻는 방법-C-Language (0) | 2021.01.07 |
React의 CSS 유사 요소 (0) | 2021.01.07 |
Git : 커밋에 추가 된 항목이 없지만 추적되지 않은 파일이 있음 (0) | 2021.01.07 |