.NET(3.5)使用点而不是冒号来格式化时间作为它的IT文化的TimeSeparator?

根据维基百科 (并在Dario Solera的回答中证实),在意大利,他们使用冒号格式化时间:

24小时表示法以书写forms使用冒号作为分隔符。 示例:14:05。 会议记录以两位数字写成; 小时数可以带或不带前导零写入。

但是,运行以下代码似乎输出点:

using System.Globalization; Thread.CurrentThread.CurrentCulture = new CultureInfo("it-IT"); Thread.CurrentThread.CurrentUICulture = new CultureInfo("it-IT"); // Outputs "11.08" Console.WriteLine(DateTime.Now.ToShortTimeString()); // Outputs "." Console.WriteLine(new CultureInfo("it-IT").DateTimeFormat.TimeSeparator); 

这是一个框架错误吗? 什么是“修复”它的最佳方法? TimeSeparator是可设置的 – 我们应该在分配给Thread.CurrentThread.CurrentCulture等之前覆盖它吗?

这似乎是一个.NET 3.5问题。 在.NET 4.0中,您发布的代码按预期使用冒号。 看起来像框架版本之间的一个奇怪的突破性变化,但似乎升级到.NET 4将解决问题。

我可以保证在意大利我们使用冒号分隔小时和分钟数字,我们使用24小时格式。 维基百科是正确的(至少这次)。

您的问题可能是您没有设置Thread的UI文化。 像这样的东西应该工作:

 Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("it-IT"); 

意大利的小时/分钟分隔符( TimeSeparator )似乎是一个. 而不是:

你是专门为意大利文化格式化的,所以这就是将要使用的。

DateTime格式字符串中, :是此分隔符的占位符 – 如果文化定义. 或者,或者作为分隔符的任何其他东西,在使用该文化格式化DateTime时将被替换的内容。

根据Oded的回答 ,这可能是你应该使用的:

 var culture = CultureInfo.GetCultureInfo("it-IT"); var stringValue = new TimeSpan(100, 100, 100, 100, 100).ToString(null, culture); var timespan = TimeSpan.Parse(stringValue, culture); // Another example var culture = CultureInfo.GetCultureInfo("it-IT"); var stringValue = DateTime.Now.ToString(null, culture); var dateTime = DateTime.Parse(stringValue, culture);