Conversores de data e hora respeitam o argumento de cultura

Os métodos ConvertTo nas seguintes classes agora usam a cultura do parâmetro culture como o provedor de formato para a data e a hora em vez de CultureInfo.CurrentCulture:

Comportamento anterior

Anteriormente, as APIs afetadas usavam CultureInfo.CurrentCulture como provedor de formato para data e hora, mesmo que o chamador especificasse uma cultura no parâmetro culture.

Considere o snippet de código a seguir que define a cultura atual como Espanhol (Espanha), mas passa a cultura personalizada Francês para 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)));

No .NET 7 e em versões anteriores, esse código imprime a data no formato correto, mas com o nome do mês em espanhol em vez de francês:

Current culture: es-ES
01 agosto 2022

Novo comportamento

Começando no .NET 8, as APIs afetadas usam a cultura especificada pelo parâmetro culture como provedor de formato.

O snippet de código mostrado no Comportamento anterior imprime corretamente o nome do mês em francês:

Current culture: es-ES
01 août 2022

Versão introduzida

.NET 8 versão prévia 4

Tipo de alteração interruptiva

Esta é uma alteração comportamental.

Motivo da alteração

Essa alteração corrige um bug em que ConvertTo não era consistente com ConvertFrom. Ele usava as cadeias de caracteres de formato de data e hora da cultura de entrada, mas formatava a data e a hora com CurrentCulture.

Se você se baseou no comportamento anterior, passe CultureInfo.CurrentCulture, null ou uma cultura personalizada para o parâmetro culture.

APIs afetadas