根据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
之前覆盖它吗?
答案 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);