_ASP.NET WebForms
_ページのDateTime値を解析していますが、日付文字列は、指定された形式文字列の1つと明確に一致していても、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
_を指定していることに注意してください、しかしとしてCultureInfo
オブジェクトを提供すると同じ問題が発生しますこのパラメーターの_(CultureInfo provider = new CultureInfo("en-US"))
_。
私は何が欠けていますか?
試してください:
DateTime.TryParseExact(txtStartDate.Text, formats,
System.Globalization.CultureInfo.InvariantCulture,
System.Globalization.DateTimeStyles.None, out startDate)
ここでは、いくつかのことを確認できます。
DateTime.TryParseExact
_には複数の形式を指定できます。利用可能な形式の完全なリストを確認してください here 。_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