请考虑以下控制台应用代码:
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-GB");
Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;
DateTime date = new DateTime(2014, 01, 19);
Console.WriteLine("{0}", date); // Prints 19/01/2014
Debug.WriteLine("{0}", date); // Prints 01/19/2014
Debug.WriteLine(date); // Prints 19/01/2014
正如评论中所述,当Console.WriteLine()
打印19/01/2014
时Debug.WriteLine()
打印01/19/2014
。
更糟糕的是,Debug.WriteLine("{0}", date)
提供了Debug.WriteLine(date)
...
是否期望Debug.WriteLine()
忽略该主题的文化设置?
有没有办法让Debug.WriteLine()
使用线程的文化设置?或者我必须使用String.Format()
并将结果传递给Debug.WriteLine()
吗?
(注意:我在Windows 8.1 64位,en-GB上运行此操作,使用带有.Net 4.51的Visual Studio 2013,并调试AnyCPU版本。)
答案 0 :(得分:12)
这是明确处理的in the source。
这也是有道理的 调试输出不应受最终用户文化的影响;无论代码在何处运行,您都希望调试日志保持一致。
答案 1 :(得分:10)
您使用InvariantCulture
:
public static void WriteLine(string format, params object[] args)
{
TraceInternal.WriteLine(String.Format(CultureInfo.InvariantCulture, format, args));
}
所有其他重载都没有做与文化相关的任何事情。你可以通过使用带string
:
public static void WriteLine(string message, string category)
{
TraceInternal.WriteLine(message, category);
}
通过这样做:
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-GB");
Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;
DateTime date = new DateTime(2014, 01, 19);
var formatedDate = string.Format("{0}", date);
Console.WriteLine(formatedDate);
Debug.WriteLine(formatedDate);
现在两人都打印:
19/01/2014 00:00:00
19/01/2014 00:00:00