Я получаю String.FormatException, пытаясь преобразовать / проанализировать строку, когда культура отличается от неамериканской. Странно то, что строка была сгенерирована с применением того же формата и культуры, что и те, которые использовались для анализа ее обратно в строку. В приведенном ниже коде все эти версии не будут работать:
const string culture = "ja-JP";
const string format = "dd MMM yyyy"; //error in orignal post included {0:}
CultureInfo info = new CultureInfo(culture);
Thread.CurrentThread.CurrentCulture = info;
Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(culture);
//string toParse = String.Format(info, format, DateTime.Now); //error in original post
string toParse = DateTime.Now.ToString(format);
System.Diagnostics.Debug.WriteLine(string.Format("Culture format = {0}, Date = {1}", culture, toParse));
try
{
DateTime output = DateTime.ParseExact(toParse, format, CultureInfo.InvariantCulture);
//DateTime output = DateTime.ParseExact(toParse, format, info);
//DateTime output = DateTime.ParseExact(toParse, format, info, DateTimeStyles.None);
//DateTime output = Convert.ToDateTime(toParse, info);
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex.Message);
}
Обратите внимание, что строка для en-US - "25 февраля 2010". Строка для ja-JP - "25 2 2010".
Есть идеи, как вернуть "25 2 2010" в дату?
Заранее спасибо.
Edit1: я должен отметить, что японская культура здесь жестко закодирована только в качестве примера. Мне действительно нужно это для работы с любой культурой, установленной пользователем. Что мне нужно, так это решение, в котором формат даты и времени работает независимо от культуры пользователя. Я думаю, что сингл М делает это.
Редактировать 2: M не работает для английского языка. Кто-нибудь знает строку формата, которая работает для всех культур?