开发者

.NET (3.5) formats times using dots instead of colons as TimeSeparator for it-IT culture?

开发者 https://www.devze.com 2023-04-06 04:10 出处:网络
According to Wikipedia (and confirmed in an answer by Dario Solera), in Italy they format times using colons:

According to Wikipedia (and confirmed in an answer by Dario Solera), in Italy they format times using colons:

The 24-hour notation is used in writing with a colon as a separator. Example: 14:05. The minutes a开发者_Python百科re written with two digits; the hour numbers can be written with or without leading zero.

However, running the following code seems to output dots:

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

Is this a framework bug? What's the best way to "fix" it? TimeSeparator is settable - should we just overwrite it before assigning to Thread.CurrentThread.CurrentCulture etc.?


I can guarantee in Italy we use colons to separate hour and minute digits, and we use the 24-hour format. Wikipedia is correct (at least this time).

Your problem is likely that you're not setting the Thread's UI culture. Something like this should work:

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


This seems to be a .NET 3.5 issue. In .NET 4.0 the code you posted uses a colon as expected. Seems like a strange breaking change between the framework versions, but seems like upgrading to .NET 4 will solve the problem.


The hours/minutes separator (TimeSeparator) in Italy seems to be a ., not a :.

You are specifically formatting for the Italian culture, so it follows that this is what will be used.

In a DateTime format string, the : is a place holder for this separator - if the culture defines . or , or anything else as the separator, that's what will be substituted when formatting the DateTime with that culture.


Following from the conversation under Oded's answer, this is probably what you should be using:

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

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号