. net(3.5)在it-IT区域性中使用点代替冒号作为时间分隔符来格式化时间

本文关键字:时间 格式化 分隔符 it-IT 区域性 net | 更新日期: 2023-09-27 18:09:08

根据维基百科(并在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等之前覆盖它?

. net(3.5)在it-IT区域性中使用点代替冒号作为时间分隔符来格式化时间

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

你的问题很可能是你没有设置线程的UI文化。像这样的代码应该可以工作:

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

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

您是专门针对意大利文化进行格式化的,因此这就是将要使用的内容。

DateTime格式字符串中,:是此分隔符的占位符—如果区域性将.,或其他任何内容定义为分隔符,则在用该区域性格式化DateTime时将替换该分隔符。

这似乎是。net 3.5的问题。在。net 4.0中,你发布的代码像预期的那样使用了冒号。似乎是框架版本之间的一个奇怪的突破性变化,但似乎升级到。net 4将解决这个问题。

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