Aunque MSDN dice que los formatos "s" y "o" reflejan el estándar, parecen ser capaces de analizar solo un subconjunto limitado de él. Especialmente es un problema si la cadena contiene la especificación de zona horaria. (Ni tampoco para formatos básicos ISO8601, o formatos de precisión reducidos, sin embargo, este no es exactamente su caso). Es por eso que uso cadenas de formato personalizadas cuando se trata de analizar ISO8601.Actualmente mi fragmento preferido es:
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 no le importa analizar cadenas TZ-menos (yo), se puede añadir una línea de "s" para ampliar en gran medida el número de alteraciones de formato cubiertos.
posible duplicado de [Convertir cadena a fecha en .NET] (http://stackoverflow.com/questions/2188585/convert-string-to-date-in-net) – abatishchev
Buscar primero por favor. Esta es una pregunta número 100 sobre este tema en este mes – abatishchev
@abatishchev no, esto no es un duplicado de esa pregunta. Tal vez deberías leer la pregunta primero antes de responder. – Aidin