C# 日期时间格式:为什么不';t ToSortTimeString和;{0:t}";展示同样的东西?

C# 日期时间格式:为什么不';t ToSortTimeString和;{0:t}";展示同样的东西?,c#,datetime,C#,Datetime,当我在C#中运行此程序时,我得到: 14:00 下午2:00 下午2:00 CultureInfo.CurrentCulture和CultureInfo.CurrentUICulture在我的电脑上都设置为“en US”。我没有对我的区域设置进行任何自定义;当我进入控制面板的那一部分时,一切都显示12小时的时间,包括上午和下午 那么为什么“{0:t}”使用24小时打印?我认为问题在于Debug.print而不是t格式说明符。如果使用Console.WriteLine而不是Debug.Print,

当我在C#中运行此程序时,我得到:

14:00
下午2:00
下午2:00

CultureInfo.CurrentCulture
CultureInfo.CurrentUICulture
在我的电脑上都设置为“en US”。我没有对我的区域设置进行任何自定义;当我进入控制面板的那一部分时,一切都显示12小时的时间,包括上午和下午


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

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

编辑:刚刚看了一下反射器
Debug.Print
始终使用不变区域性,而不是当前区域性,并且该区域性中的时间格式为24小时

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());

DateTime.Today.AddHours(14)
@SLaks:这条评论应该告诉我们什么?@Daniel:这是他第二条评论的一个简短版本line@SLaks:是的,你说得对。下次,请至少在代码中添加一点提示;-)
[Conditional("DEBUG")]
public static void Print(string format, params object[] args)
{
    TraceInternal.WriteLine(string.Format(CultureInfo.InvariantCulture, format, args));
}