日時のコンバーターはカルチャ引数を遵守する
次のクラスの 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.CurrentCulture、null
、またはカスタム カルチャを渡してください。
影響を受ける API
- System.ComponentModel.DateOnlyConverter.ConvertTo(ITypeDescriptorContext, CultureInfo, Object, Type)
- System.ComponentModel.DateTimeConverter.ConvertTo(ITypeDescriptorContext, CultureInfo, Object, Type)
- System.ComponentModel.DateTimeOffsetConverter.ConvertTo(ITypeDescriptorContext, CultureInfo, Object, Type)
- System.ComponentModel.TimeOnlyConverter.ConvertTo(ITypeDescriptorContext, CultureInfo, Object, Type)
.NET