Pourquoi ne pas simplement utiliser le spécificateur de format aller-retour ("O", "o") ?
Le spécificateur de format standard «O» ou «o» représente une chaîne de format de date et d'heure personnalisée utilisant un modèle qui préserve les informations de fuseau horaire et émet une chaîne de résultat conforme à ISO 8601. Pour les valeurs DateTime, ce spécificateur de format est conçu pour préserver la date et les valeurs d'heure avec la propriété DateTime.Kind dans le texte. La chaîne mise en forme peut être analysée à l'aide de la méthode DateTime.Parse (String, IFormatProvider, DateTimeStyles) ou DateTime.ParseExact si le paramètre styles est défini sur DateTimeStyles.RoundtripKind.
Le spécificateur de format standard «O» ou «o» correspond à la chaîne de format personnalisé «aaaa» - «MM» - «jj'T'HH»: «mm»: «ss». «FffffffK» pour les valeurs DateHeure et "aaaa '-' MM '-' jj'T'HH ':' mm ':' ss '.' fffffffzzz" Chaîne de format personnalisé pour les valeurs DateTimeOffset. Dans cette chaîne, les paires de guillemets simples qui délimitent des caractères individuels, tels que les tirets, les deux points et la lettre «T», indiquent que le caractère individuel est un littéral qui ne peut pas être modifié. Les apostrophes n'apparaissent pas dans la chaîne de sortie.
Le spécificateur de format standard O "ou" o "(et la chaîne de format personnalisée" aaaa '-' MM '-' jj'T'HH ':' mm ':' ss '.' FffffffK ") tire parti des trois méthodes que ISO 8601 représente les informations de fuseau horaire pour préserver la propriété Kind des valeurs DateTime:
public class Example
{
public static void Main()
{
DateTime dat = new DateTime(2009, 6, 15, 13, 45, 30,
DateTimeKind.Unspecified);
Console.WriteLine("{0} ({1}) --> {0:O}", dat, dat.Kind);
DateTime uDat = new DateTime(2009, 6, 15, 13, 45, 30,
DateTimeKind.Utc);
Console.WriteLine("{0} ({1}) --> {0:O}", uDat, uDat.Kind);
DateTime lDat = new DateTime(2009, 6, 15, 13, 45, 30,
DateTimeKind.Local);
Console.WriteLine("{0} ({1}) --> {0:O}\n", lDat, lDat.Kind);
DateTimeOffset dto = new DateTimeOffset(lDat);
Console.WriteLine("{0} --> {0:O}", dto);
}
}