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

时间:2011-05-31 13:35:04

标签: 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());

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

  

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

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

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

1 个答案:

答案 0 :(得分: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));
}