dotnet/roslyn

VB disregards CultureInfo on DateTime evaluation

Open

#42,906 opened on Mar 30, 2020

View on GitHub
 (0 comments) (0 reactions) (0 assignees)C# (4,257 forks)batch import
Area-InteractiveBugInteractive-DebuggingLanguage-VBhelp wanted

Repository metrics

Stars
 (20,414 stars)
PR merge metrics
 (Avg merge 6d 17h) (256 merged PRs in 30d)

Description

Steps to Reproduce:

Sub Main(args As String())
    Thread.CurrentThread.CurrentCulture = New CultureInfo("pt-BR")

    Dim dateTime = System.DateTime.Now
    Console.WriteLine(dateTime) // breakpoint here
End Sub
  1. Start debugging and stop at breakpoint;
  2. Open Watch Window and evaluate the following expressions:
dateTime
dateTime.ToString()

Expected Behavior: Both expressions have the same formatting.

Actual Behavior: DateTime object evaluation ignores formatting and uses "en-US" by default.

Remarks

  • Not a regression;
  • The issue only reproduces on VB since it follows the codepath for DateTime as a primitive value;
  • Regarding this code path on Formatter.FormatPrimitive(...):
if (value.Type.GetLmrType().IsDateTime())
{
    var dateDataValue = value.GetPropertyValue("Ticks", inspectionContext);
    obj = new DateTime((long)dateDataValue.HostObjectValue);
}

It is no longer necessary - the debugger now returns the DateTime object at value.HostObjectValue.

Contributor guide