1. ホーム
  2. c#

DateTime.TryParseExact() が有効なフォーマットを拒否する

2023-10-19 07:22:06

質問

の中で DateTime 値をパースしています。 ASP.NET WebForms ページで日付の文字列をパースしていますが、日付の文字列は 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)