. 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
等之前覆盖它?
我可以保证在意大利我们使用冒号分隔小时和分钟数字,并且我们使用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);