2011-05-31 50 views
3
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#中运行它,我得到:DateTime格式:为什么ToShortTimeString和“{0:t}”显示相同的内容?

14:00
2:00 PM
2:00 PM

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

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

+0

'DateTime.Today.AddHours (14)' – SLaks 2011-05-31 13:39:25

+0

@SLaks:这个评论应该告诉我们什么? – 2011-05-31 13:43:33

+0

@Daniel:这是他第二行的短版 – SLaks 2011-05-31 13:48:49

回答

6

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

编辑:刚刚与反射看看... Debug.Print总是使用不变的文化,而不是当前的文化,在这种文化的时间格式为24小时

[Conditional("DEBUG")] 
public static void Print(string format, params object[] args) 
{ 
    TraceInternal.WriteLine(string.Format(CultureInfo.InvariantCulture, format, args)); 
} 
相关问题