ホームページ >バックエンド開発 >C++ >DateTime.Parse() が「文字列が有効な DateTime として認識されませんでした」というメッセージで失敗するのはなぜですか?

DateTime.Parse() が「文字列が有効な DateTime として認識されませんでした」というメッセージで失敗するのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-27 00:41:08596ブラウズ

Why Does DateTime.Parse() Fail with

「文字列は有効な DateTime 形式 dd/MM/yyyy として認識されません」解析エラー

DateTime.Parse() を使用して「dd/MM/yyyy」形式の文字列を DateTime オブジェクトに変換すると、「文字列が有効な DateTime として認識されません」エラーが発生する場合があります。このエラーは、文字列形式がデフォルトの IFormatProvider で指定されている予期される形式と一致しないことを示します。

解決策:

方法 1: ParseExact()

を使用する

DateTime.ParseExact() メソッドは、デフォルトのカルチャ固有の形式をオーバーライドして、目的の日付形式を明示的に指定します。このメソッドには、変換する文字列、形式文字列、および IFormatProvider の 3 つのパラメーターが必要です。

<code class="language-csharp">DateTime date = DateTime.ParseExact(this.Text, "dd/MM/yyyy", null);</code>

方法 2: カスタマイズ IFormatProvider

または、カスタム IFormatProvider を作成して、必要なカルチャ固有の書式設定を提供することもできます。このアプローチにより、カスタム形式に従いながら、DateTime.Parse() の柔軟性を維持できます。

<code class="language-csharp">// 创建一个具有所需格式的自定义提供程序
CultureInfo customCulture = new CultureInfo("en-US");
customCulture.DateTimeFormat.ShortDatePattern = "dd/MM/yyyy";

// 使用自定义提供程序进行解析
DateTime date = DateTime.Parse(this.Text, customCulture);</code>

Parse()ParseExact() の違い:

  • ParseExact() は形式を明示的に指定しますが、Parse() はデフォルトの IFormatProvider (通常は現在のカルチャ) に依存します。
  • ParseExact() は、指定された形式に従って文字列を検証するため、より正確でタイプセーフです。
  • Parse() より柔軟になり、システムの文化に基づいてさまざまな日付形式を使用できるようになります。

おすすめ:

入力文字列形式が正しい限り、どちらの方法も有効です。型安全性と精度の観点からは、特定の形式を強制するため、ParseExact() が推奨されます。ただし、日付形式が文化によって異なる場合は、ユーザーのロケールに自動的に適応するため、Parse() の方が便利かもしれません。最終的に、最適なアプローチは特定のアプリケーションのニーズによって異なります。

以上がDateTime.Parse() が「文字列が有効な DateTime として認識されませんでした」というメッセージで失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。