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

时间:2011-09-21 10:09:58

标签: c# .net localization globalization cultureinfo

根据Wikipedia(并在an answer by Dario Solera中确认),在意大利,他们使用冒号格式化时间:

  

24小时表示法以书写形式使用冒号作为分隔符。   示例: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之前覆盖它吗?

4 个答案:

答案 0 :(得分:6)

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

您的问题很可能是您没有设置Thread的UI文化。这样的事情应该有效:

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

答案 1 :(得分:3)

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

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

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

答案 2 :(得分:3)

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

答案 3 :(得分:0)

根据Oded's answer下的对话,这可能就是您应该使用的内容:

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);