日時のコンバーターはカルチャ引数を遵守する

次のクラスの ConvertTo メソッドで、日時の書式プロバイダーとして、CultureInfo.CurrentCulture ではなく、culture パラメーターのカルチャが使用されるようになりました。

以前の動作

以前は、影響を受ける API は、呼び出し元が culture パラメーターにカルチャを指定していた場合でも日時の書式プロバイダーとして CultureInfo.CurrentCulture を使用していました。

現在のカルチャをスペイン語 (スペイン) に設定し、カスタマイズしたフランス語カルチャを DateTimeConverter.ConvertTo(ITypeDescriptorContext, CultureInfo, Object, Type) に渡す次のコード スニペットを考えてみましょう。

CultureInfo.CurrentCulture = new CultureInfo("es-ES");
Console.WriteLine($"Current culture: {CultureInfo.CurrentCulture}");

var dt1 = new DateTime(2022, 8, 1);

var frCulture = new CultureInfo("fr-FR");
frCulture.DateTimeFormat.ShortDatePattern = "dd MMMM yyyy";

Console.WriteLine(TypeDescriptor.GetConverter(dt1).ConvertTo(null, frCulture, dt1, typeof(string)));

.NET 7 以前のバージョンでは、このコードは日付を正しい形式で出力していましたが、月名はフランス語ではなくスペイン語で出力していました。

Current culture: es-ES
01 agosto 2022

新しい動作

.NET 8 以降、影響を受ける API は、書式プロバイダーとして culture パラメーターで指定されたカルチャを使用します。

前の動作に示されているコード スニペットは、次のように月名をフランス語で正しく出力します。

Current culture: es-ES
01 août 2022

導入されたバージョン

.NET 8 Preview 4

破壊的変更の種類

この変更は、動作変更です。

変更理由

この変更により、ConvertFrom と一致しなかった ConvertTo のバグが修正されています。 日時の書式指定文字列には入力カルチャが使用されていましたが、日時は CurrentCulture で書式設定されていました。

前の動作に依存していた場合は、culture パラメーターに、CultureInfo.CurrentCulturenull、またはカスタム カルチャを渡してください。

影響を受ける API