特定の形式で日付を解析しようとしていますが、説明できないことがわかりました:
var date = new DateTime(2001, 01, 10);
var cultureInfo1 = CultureInfo.GetCultureInfo(CultureInfo.CurrentCulture.Name);
var cultureInfo2 = new CultureInfo(CultureInfo.CurrentCulture.Name);
Assert.AreEqual(date, DateTime.ParseExact("10/01/01", "dd/MM/yy", cultureInfo1));
Assert.Throws<FormatException>(() => DateTime.ParseExact("10/01/01", "dd/MM/yy", CultureInfo.CurrentCulture));
Assert.Throws<FormatException>(() => DateTime.ParseExact("10/01/01", "dd/MM/yy", cultureInfo2));
この呼び出しが CurrentCulture では失敗し、Culture 名を使用して作成された新しいインスタンスでは失敗するのに、GetCultureInfo() を使用して取得した Culture では失敗しないのはなぜですか。現在のカルチャは en-US であり、Windows は次の 2 つの変更 (intl.cpl で行われます) で構成されています: メトリック システムと短い日付形式 'dd-MMM-yyyy' を使用します。
アップデート:
元の質問には正しく答えられましたが、両方の文化が日付を解析できることを付け加えたいと思います。問題は、CultureInfo.DateTimeFormat.DateSeparator で指定された日付区切り記号にあるようです。
元のカルチャには「/」が含まれていますが、私のオーバーライドを持つ cultureInfo には区切り記号として「-」があります。
カルチャで指定されたセパレータに関係なく、ParseExact で日付を解析するには、形式仕様を"dd/MM/yy"から"dd'/'MM'/'yy"に変更する必要があります。