Liegt es an einem Problem mit dem Kulturformat?
Ja. Ihr Benutzer muss sich in einer Kultur befinden, in der das Zeittrennzeichen ein Punkt ist. Sowohl ":" als auch "/" werden kulturspezifisch in benutzerdefinierten Datums- und Zeitformaten interpretiert .
Wie kann ich sicherstellen, dass die Ergebniszeichenfolge durch einen Doppelpunkt anstelle eines Punkts getrennt ist?
Ich würde vorschlagen, Folgendes anzugeben CultureInfo.InvariantCulture
:
string text = dateTime.ToString("MM/dd/yyyy HH:mm:ss.fff",
CultureInfo.InvariantCulture);
Alternativ können Sie auch die Zeit- und Datumstrennzeichen angeben:
string text = dateTime.ToString("MM'/'dd'/'yyyy HH':'mm':'ss.fff");
... aber das gibt Ihnen "interessante" Ergebnisse, die Sie wahrscheinlich nicht erwarten, wenn Sie Benutzer in einer Kultur zum Laufen bringen, in der das Standardkalendersystem nicht der Gregorianische Kalender ist. Nehmen Sie zum Beispiel den folgenden Code:
using System;
using System.Globalization;
using System.Threading;
class Test
{
static void Main()
{
DateTime now = DateTime.Now;
CultureInfo culture = new CultureInfo("ar-SA"); // Saudi Arabia
Thread.CurrentThread.CurrentCulture = culture;
Console.WriteLine(now.ToString("yyyy-MM-ddTHH:mm:ss.fff"));
}
}
Das ergibt eine Ausgabe (am 18. September 2013) von:
11/12/1434 15:04:31.750
Ich vermute, dass Ihr Webdienst davon überrascht wäre!
Ich würde eigentlich vorschlagen, nicht nur die invariante Kultur zu verwenden, sondern auch auf ein ISO-8601-Datumsformat umzusteigen:
string text = dateTime.ToString("yyyy-MM-ddTHH:mm:ss.fff");
Dies ist ein global akzeptiertes Format - es ist auch sortierbar und macht die Reihenfolge von Monat und Tag offensichtlich. (Der 06.07.2013 könnte je nach Leserkultur als 7. Juni oder 6. Juli interpretiert werden.)