C# .NET(3.5)使用点而不是冒号作为it区域性的时间分隔符格式化时间?

C# .NET(3.5)使用点而不是冒号作为it区域性的时间分隔符格式化时间?,c#,.net,localization,globalization,cultureinfo,C#,.net,Localization,Globalization,Cultureinfo,根据(并在中确认),在意大利,他们使用冒号格式化时间: 24小时符号用于书写,冒号用作分隔符。 示例:14:05。会议记录用两位数字书写;时刻 数字可以写为带或不带前导零 但是,运行以下代码似乎会输出点: using System.Globalization; Thread.CurrentThread.CurrentCulture = new CultureInfo("it-IT"); Thread.CurrentThread.CurrentUICulture = new CultureInf

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

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
等之前,我们是否应该覆盖它?

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

您是专门为意大利文化设置格式的,因此这就是将要使用的内容


日期时间
格式字符串中,
是此分隔符的占位符-如果区域性定义了
或任何其他分隔符,这就是在使用该区域性格式化
DateTime
时将被替换的内容。

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

您的问题可能是您没有设置线程的UI区域性。像这样的方法应该会奏效:

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

根据下面的对话,这可能是您应该使用的:

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

这似乎是一个.NET3.5版本的问题。在.NET4.0中,您发布的代码按预期使用冒号。框架版本之间似乎出现了一个奇怪的突破性变化,但升级到.NET 4似乎可以解决问题。

@DannyTuppeny-并非闻所未闻。@Danny-这可能还取决于安装的语言包和系统配置。例如,如果您的Windows安装设置为“it”,请进入区域设置并覆盖其中的格式。Net将反映这一变化。另外,
CultureInfo
实现了
IFormatProvider
,请尝试使用它的
ToString
重载。@Danny我会很快给出一个答案来帮助您解决这个问题,但我不会准确回答这个问题-所以请接受这个答案。请参阅@Dario Solera的答案-显然情况并非如此,在意大利,他们确实使用冒号(感谢您提供的信息!我尝试设置UICulture和区域性,但UICulture没有效果。这在某种程度上混淆了事情,因为.NET Framework似乎是错误的!:/日期和时间在我的计算机上正确输出-可能是与您的操作系统设置的区域设置冲突。另外,请记住,如果您使用的是ASP.NET应用程序,您必须在页面生存期内的某个特定时刻(InitializeCulture IIRC)重写区域性,否则运行时将使用浏览器提供的区域性值来服务整个请求。如果您运行我发布的代码(我将其更新为包含UICulture),您是否获得相同的输出或冒号?我在本地开发机器(Windows 7)和服务器(Win 2003 Server)上都看到了点。我们的默认区域性是UK,并且也使用冒号。我们确实在正确的位置设置了区域性,因为我们的整个应用程序都按预期工作(如果我们没有设置,它可能会回到UK默认值)。我很困惑为什么你会看到我们的不同行为:(原来这是一个.NET 3.5问题-在.NET 4中它返回冒号!不确定这是否是一个bug,或者意大利在过去某个时候使用了dots?这几乎就是我们正在做的,但我们使用的是TimeSpan,TimeSpan.Parse在3.5中不支持不同的文化:(然而,问题是,当我们的文化设置为它时,我无法使我的机器正确输出冒号:(@DannyTuppeny听起来像一个.Net框架错误。我在ILSpy和.Net 4.0中快速查看了一下,Timespan解析是100%管理的-您应该能够将其从ILSpy中复制出来(
System.Globalization.TimeSpanParse
);或者从Mono代码库中获取它。文档似乎表明3.5中它只是没有文化意识(并且不支持文化),我不认为这是一个bug,更多的是一个疏忽:(将了解4.0版的工作原理,谢谢:)哦,但是用点并不能解决它的问题:/你能试试我在问题中发布的代码,看看你看到了什么结果吗?我们在这里打满了补丁,不知道为什么会看到点!@DannyTuppeny不,我看到的是冒号。
104.05:41:40
,所以这就是
HH:MM:SS
。但是我的本土文化“恩扎”也使用冒号。