DateTime格式:为什么不ToShortTimeString和"{0:t}"显示相同的东西?

Rya*_*ndy 3 c# datetime

var todayAt2PM = new DateTime(
    DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 14, 0, 0);
Debug.Print("{0:t}", todayAt2PM);
Debug.Print("{0}", todayAt2PM.ToString("t"));
Debug.Print("{0}", todayAt2PM.ToShortTimeString());
Run Code Online (Sandbox Code Playgroud)

当我在C#中运行它时,我得到:

14:00
2:00 PM
2:00 PM

CultureInfo.CurrentCulture并且CultureInfo.CurrentUICulture都在我的电脑上设置为"en-US".我没有对我的区域设置进行任何自定义; 当我进入控制面板的那一部分时,一切都表明12小时的时间,AM和PM.

那么为什么"{0:t}"使用24小时打印?

Tho*_*que 6

我认为问题在于Debug.Print而不是t格式说明符.如果您使用Console.WriteLine而不是Debug.Print,它会给出预期的结果.

编辑:只是看看Reflector ... Debug.Print总是使用不变的文化,而不是当前的文化,文化中的时间格式是24小时

[Conditional("DEBUG")]
public static void Print(string format, params object[] args)
{
    TraceInternal.WriteLine(string.Format(CultureInfo.InvariantCulture, format, args));
}
Run Code Online (Sandbox Code Playgroud)