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小时打印?
我认为问题在于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)