Bien que MSDN dit que "s" et le "o" formats de refléter la norme, ils semblent être en mesure d'analyser seulement un sous-ensemble limité de. C'est surtout un problème si la chaîne contient des spécifications zone. (Ni pour base ISO8601 formats, ou réduction de la précision des formats - cependant ce n'est pas exactement le cas.) C'est pourquoi j'utilise les chaînes de format personnalisées quand il s'agit de l'analyse ISO8601. Actuellement mon préféré extrait est:
static readonly string[] formats = {
// Basic formats
"yyyyMMddTHHmmsszzz",
"yyyyMMddTHHmmsszz",
"yyyyMMddTHHmmssZ",
// Extended formats
"yyyy-MM-ddTHH:mm:sszzz",
"yyyy-MM-ddTHH:mm:sszz",
"yyyy-MM-ddTHH:mm:ssZ",
// All of the above with reduced accuracy
"yyyyMMddTHHmmzzz",
"yyyyMMddTHHmmzz",
"yyyyMMddTHHmmZ",
"yyyy-MM-ddTHH:mmzzz",
"yyyy-MM-ddTHH:mmzz",
"yyyy-MM-ddTHH:mmZ",
// Accuracy reduced to hours
"yyyyMMddTHHzzz",
"yyyyMMddTHHzz",
"yyyyMMddTHHZ",
"yyyy-MM-ddTHHzzz",
"yyyy-MM-ddTHHzz",
"yyyy-MM-ddTHHZ"
};
public static DateTime ParseISO8601String ( string str )
{
return DateTime.ParseExact ( str, formats,
CultureInfo.InvariantCulture, DateTimeStyles.None );
}
Si vous n'avez pas l'esprit d'analyse TZ-moins de cordes (je ne), vous pouvez ajouter un "s" ligne de prolonger considérablement le nombre de couverts format des altérations.