.NET (3.5) форматирует время, используя точки вместо двоеточий в качестве TimeSeparator для ИТ-культуры? - PullRequest
3 голосов
/ 21 сентября 2011

Согласно Википедии (и подтверждено в ответом Дарио Солера ), в Италии они форматируют времена, используя двоеточия:

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 и т. Д .?1016*

Ответы [ 4 ]

6 голосов
/ 22 сентября 2011

Я могу гарантировать, что в Италии мы используем двоеточия для разделения часовых и минутных цифр и 24-часовой формат. Википедия верна (по крайней мере, на этот раз).

Вероятно, ваша проблема в том, что вы не устанавливаете культуру пользовательского интерфейса Thread. Примерно так должно работать:

Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("it-IT");
3 голосов
/ 22 сентября 2011

Это похоже на проблему .NET 3.5. В .NET 4.0 в размещенном вами коде используется двоеточие, как и ожидалось. Похоже, странное изменение между версиями платформы, но похоже, что обновление до .NET 4 решит проблему.

3 голосов
/ 21 сентября 2011

Разделитель часов / минут (TimeSeparator) в Италии выглядит как ., а не :.

Вы специально форматируете для итальянской культуры, поэтому из этого следует, что это будет использоваться.

В строке формата DateTime : является заполнителем для этого разделителя - если культура определяет . или , или что-либо еще в качестве разделителя, это то, что будет подставлено при форматировании DateTime с этой культурой.

0 голосов
/ 22 сентября 2011

Исходя из беседы под Ответ Одеда , это, вероятно, то, что вы должны использовать:

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