Ich erhalte eine String.FormatException, die versucht, eine Zeichenfolge zu konvertieren/zu analysieren, wenn die Kultur nicht nicht US ist. Die seltsame Sache ist, dass die Zeichenkette erzeugt wurde, indem man das gleiche Format und die gleiche Kultur anwendete wie jene, die verwendet wurden, um es wieder in eine Zeichenkette zu zerlegen. Im folgenden Code werden alle diese Versionen fehlschlagen:String.FormatException mit DateTime in nicht US-Kultur
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); }
Beachten Sie, dass die Zeichenfolge für en-US ist „25. Februar 2010“. Die Zeichenfolge für ja-JP ist "25 2 2010".
Irgendeine Idee, wie man "25 2 2010" zurück in ein Datum bekommt?
Vielen Dank im Voraus.
Edit1: Ich sollte beachten, dass die japanische Kultur hier nur als Beispiel fest codiert ist. Ich brauche das wirklich, um mit der Kultur zu arbeiten, die vom Benutzer eingestellt wird. Was ich brauche, ist eine Lösung, bei der das Format für die Datumszeit unabhängig von der Kultur des Benutzers funktioniert. Ich denke, das Single M macht es.
Edit 2: M funktioniert nicht für Englisch. Wer kennt eine Format-Zeichenfolge, die für alle Kulturen funktioniert?
Wenn Sie 'DateTime.ParseExact' mit' CultureInfo.InvariantCulture' verwenden möchten, dann haben Sie Recht. Wenn Sie die JP-Kultur jedoch verwenden, wird es nicht benötigt. –
Ja, gute Sache mit der Sache {0:} - das war nicht das ultimative Problem, aber es war ein Fehler in meinem Testskript (jetzt behoben). Ich habe auch versucht, die Ja-JP-Kultur während des Parsens zu verwenden - es gibt eine Reihe von Versuchen darin. Nur ging nach Invariant, als das nicht funktionierte. – sydneyos