Est-ce à cause d'un problème de format culturel?
Oui. Votre utilisateur doit appartenir à une culture où le séparateur d'heure est un point. Les deux ":" et "/" sont interprétés d'une manière sensible à la culture dans des formats de date et d'heure personnalisés .
Comment puis-je m'assurer que la chaîne de résultat est délimitée par deux points au lieu d'un point?
Je suggère de préciser CultureInfo.InvariantCulture
:
string text = dateTime.ToString("MM/dd/yyyy HH:mm:ss.fff",
CultureInfo.InvariantCulture);
Alternativement, vous pouvez simplement citer les séparateurs d'heure et de date:
string text = dateTime.ToString("MM'/'dd'/'yyyy HH':'mm':'ss.fff");
... mais cela vous donnera des résultats "intéressants" auxquels vous ne vous attendez probablement pas si vous faites fonctionner des utilisateurs dans une culture où le système de calendrier par défaut n'est pas le calendrier grégorien. Par exemple, prenez le code suivant:
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"));
}
}
Cela produit la sortie (le 18 septembre 2013) de:
11/12/1434 15:04:31.750
Je suppose que votre service Web en serait surpris!
Je suggérerais en fait non seulement d'utiliser la culture invariante, mais également de passer à un format de date ISO-8601:
string text = dateTime.ToString("yyyy-MM-ddTHH:mm:ss.fff");
Il s'agit d'un format plus accepté dans le monde entier - il est également triable et rend l'ordre du mois et du jour évident. (Alors que le 06/07/2013 pourrait être interprété comme le 7 juin ou le 6 juillet selon la culture du lecteur.)