Este artículo se tradujo de forma manual. Mueva el puntero sobre las frases del artículo para ver el texto original. |
Traducción
Original
|
DateTime.ParseExact (Método) (String, String, IFormatProvider, DateTimeStyles)
Convierte la representación de cadena que se haya especificado para una fecha y hora en su DateTime equivalente, utilizando el formato, la información de formato específica de la referencia cultural y el estilo especificados. El formato de la representación de cadena debe coincidir exactamente con el formato especificado; de lo contrario, se produce una excepción.
Ensamblado: mscorlib (en mscorlib.dll)
public static DateTime ParseExact( string s, string format, IFormatProvider provider, DateTimeStyles style )
Parámetros
- s
- Tipo: System.String
Cadena que contiene una fecha y hora que se van a convertir.
- format
- Tipo: System.String
Especificador de formato que define el formato requerido de s.
- provider
- Tipo: System.IFormatProvider
Objeto que aporta información de formato específica de la referencia cultural acerca de s.
- style
- Tipo: System.Globalization.DateTimeStyles
Combinación bit a bit de los valores de enumeración que proporciona la información adicional sobre s, sobre los elementos de estilo que pueden encontrarse en s o sobre la conversión de s en un valor DateTime. Un valor que se especifica de forma habitual es None.
Valor devuelto
Tipo: System.DateTimeObjeto equivalente a la fecha y hora contenidas en s, tal como especifican format, provider y style.
| Excepción | Condición |
|---|---|
| ArgumentNullException |
El valor de s o format es null. |
| FormatException |
s o format es una cadena vacía. O bien s no contiene una fecha y hora que se correspondan con el modelo especificado en format. O bien El componente de hora y el designador AM/PM en s no coinciden. |
| ArgumentException |
style contiene una combinación no válida de valores DateTimeStyles. Por ejemplo, AssumeLocal y AssumeUniversal. |
El método DateTime.ParseExact(String, String, IFormatProvider, DateTimeStyles) analiza la representación de cadena de una fecha, que debe estar en un formato definido por el parámetro format. También requiere que los elementos de fecha y hora de s aparezcan en el orden especificado por format. Si s no coincide con el modelo del parámetro format y se produce cualquiera de las variaciones definidas por el parámetro style, el método inicia una excepción FormatException. En cambio, el método DateTime.Parse(String, IFormatProvider, DateTimeStyles) analiza la representación de cadena de una fecha en cualquiera de los formatos reconocidos por el objeto DateTimeFormatInfo del proveedor de formato. El método DateTime.Parse(String, IFormatProvider, DateTimeStyles) también permite que los elementos de fecha y hora de s aparezcan en cualquier orden.
Si el parámetro s contiene solamente una hora pero ninguna fecha, se usa la fecha actual, a menos que el parámetro style incluya el marcador DateTimeStyles.NoCurrentDateDefault, en cuyo caso se usa fecha predeterminada (DateTime.Date.MinValue). Si el parámetro s contiene sólo una fecha pero ninguna hora, se utiliza la medianoche (00:00:00). El parámetro style también determina si el parámetro s puede contener caracteres de espacio en blanco iniciales, interiores o finales.
Si el parámetro s no incluye información de zona horaria, la propiedad Kind del objeto DateTime devuelto será DateTimeKind.Unspecified. Este comportamiento puede modificarse utilizando el marcador DateTimeStyles.AssumeLocal, que devuelve un valor DateTime cuya propiedad Kind es DateTimeKind.Local, o utilizando los marcadores DateTimeStyles.AssumeUniversal y DateTimeStyles.AdjustToUniversal, que devuelven un valor DateTime cuya propiedad Kind es DateTimeKind.Utc. Si s incluye información de la zona horaria, la hora se convierte a la hora local, si es necesario, y la propiedad Kind del objeto DateTime devuelto se establece en DateTimeKind.Local. Este comportamiento puede modificarse usando el marcador DateTimeStyles.RoundtripKind para no convertir la hora universal coordinada (UTC) en una hora local y establecer la propiedad Kind en DateTimeKind.Utc.
El parámetro format define el modelo necesario del parámetro s. Puede estar compuesto por uno o varios de los especificadores de formato personalizados de la tabla Cadenas de formato de fecha y hora personalizadas o por un especificador de formato estándar único, que identifica un modelo predefinido, en la tabla Cadenas con formato de fecha y hora estándar.
Si no usa los separadores de fecha u hora de un modelo de formato personalizado, utilice la referencia cultural de todos los idiomas para el parámetro provider y el formato más extenso de cada especificador de formato personalizado. Por ejemplo, si desea establecer horas en el modelo, especifique el formato largo, "HH", en lugar del formato corto, "H".
Nota
|
|---|
|
En lugar de exigir que s se ajuste a un único formato para que la operación de análisis se realice correctamente, puede llamar al método DateTime.ParseExact(String, String[], IFormatProvider, DateTimeStyles) y especificar varios formatos permitidos. Esto hace que la operación de análisis tenga más probabilidades de realizarse correctamente. |
El parámetro styles incluye uno o más miembros de la enumeración DateTimeStyles que determinan si pueden aparecer espacios en blanco no definidos por format en s y dónde pueden aparecer, y controla el comportamiento exacto de la operación de análisis. En la tabla siguiente se describe el modo en que la operación del método ParseExact(String, String, IFormatProvider, DateTimeStyles) afecta a cada uno de los miembros de la enumeración DateTimeStyles.
|
Miembro DateTimeStyles |
Descripción |
|---|---|
|
Analiza s y, si es necesario, lo convierte en la hora UTC. Si s incluye un desplazamiento de zona horaria o si s no contiene ninguna información de zona horaria, pero styles incluye el marcador DateTimeStyles.AssumeLocal, el método analiza la cadena, llama a ToUniversalTime para convertir el valor DateTime devuelto en hora UTC y establece la propiedad Kind en DateTimeKind.Utc. Si s indica que representa la hora UTC o si s no contiene información de la zona horaria, pero styles incluye el marcador DateTimeStyles.AssumeUniversal, el método analiza la cadena, no realiza ninguna conversión de zona horaria en el valor DateTime devuelto y establece la propiedad Kind en DateTimeKind.Utc. En todos los demás casos, el marcador no tiene ningún efecto. |
|
|
AllowInnerWhite |
Especifica que pueden aparecer espacios en blanco no definidos por format entre cualquier elemento de fecha y hora individual. |
|
AllowLeadingWhite |
Especifica que pueden aparecer espacios en blanco no definidos por format al principio de s. |
|
AllowTrailingWhite |
Especifica que pueden aparecer espacios en blanco no definidos por format al final de s. |
|
AllowWhiteSpaces |
Especifica que s puede contener espacios en blanco iniciales, internos y finales no definidos por format. |
|
AssumeLocal |
Especifica que, si s carece de cualquier información de zona horaria, se supone que representa una hora local. A menos que esté presente el marcador DateTimeStyles.AdjustToUniversal, la propiedad Kind del valor DateTime devuelto está establecida en DateTimeKind.Local. |
|
AssumeUniversal |
Especifica que si s carece de cualquier información de zona horaria, se supone que representa la hora UTC. A menos que esté presente el marcador DateTimeStyles.AdjustToUniversal, el método convierte el valor DateTime devuelto de hora UTC en la hora local y establece su propiedad Kind en DateTimeKind.Local. |
|
Si s incluye una hora sin información de fecha, la fecha del valor devuelto se establece en DateTime.MinValue.Date. |
|
|
None |
El parámetro s se analiza utilizando los valores predeterminados. No se permiten más espacios en blanco que los que estén presentes en format. Si s no tiene un componente de fecha, la fecha del valor DateTime devuelto se establece en 1/1/0001. Si s no contiene información sobre la zona horaria, la propiedad Kind del objeto DateTime devuelto se establece en DateTimeKind.Unspecified. Si hay información de la zona horaria presente en el parámetro s, la hora se convierte a la hora local y la propiedad Kind del objeto DateTime devuelto se establece en DateTimeKind.Local. |
|
En el caso de las cadenas que contienen información de la zona horaria, intenta impedir la conversión en una fecha y hora de tipo DateTime con su propiedad Kind establecida en DateTimeKind.Local. Este marcador impide principalmente la conversión de horas UTC en horas locales. |
Los símbolos y cadenas de fecha y hora concretos (como los nombres de los días de la semana de un idioma determinado) que se usan en s se definen con el parámetro provider, al igual que el formato exacto de s si format es una cadena de especificador de formato estándar. El parámetro provider puede ser uno de los siguientes:
-
Un objeto CultureInfo que representa la referencia cultural utilizada para interpretar s. El objeto DateTimeFormatInfo devuelto por su propiedad DateTimeFormat define los símbolos y el formato en s.
-
Objeto DateTimeFormatInfo que define el formato de los datos de fecha y hora.
-
Una implementación IFormatProvider personalizada cuyo método GetFormat devuelve el objeto CultureInfo o el objeto DateTimeFormatInfo que proporciona información de formato.
Si provider es null, se usa el objeto CultureInfo que corresponde a la referencia cultural actual.
Notas para los llamadores
En .NET Framework 4, el método ParseExact produce FormatException si la cadena que se va a analizar contiene un componente de hora y un designador AM/PM que no concuerdan. En .NET Framework 3.5 y en versiones anteriores, el designador AM/PM se pasa por alto.
En el siguiente ejemplo se muestra el método ParseExact(String, String, IFormatProvider). Observe que la cadena " 5/01/2009 8:30 AM" no puede analizarse correctamente cuando el parámetro styles es igual a DateTimeStyles.None porque no se permiten espacios iniciales en format. Además, no puede analizarse correctamente la cadena "5/01/2009 09:00" cuando format es igual "MM/dd/yyyy hh:mm" porque el número de mes de la cadena de fecha no va precedido de un cero inicial, que es lo que exige format.
CultureInfo enUS = new CultureInfo("en-US"); string dateString; DateTime dateValue; // Parse date with no style flags. dateString = " 5/01/2009 8:30 AM"; try { dateValue = DateTime.ParseExact(dateString, "g", enUS, DateTimeStyles.None); Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, dateValue.Kind); } catch (FormatException) { Console.WriteLine("'{0}' is not in an acceptable format.", dateString); } // Allow a leading space in the date string. try { dateValue = DateTime.ParseExact(dateString, "g", enUS, DateTimeStyles.AllowLeadingWhite); Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, dateValue.Kind); } catch (FormatException) { Console.WriteLine("'{0}' is not in an acceptable format.", dateString); } // Use custom formats with M and MM. dateString = "5/01/2009 09:00"; try { dateValue = DateTime.ParseExact(dateString, "M/dd/yyyy hh:mm", enUS, DateTimeStyles.None); Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, dateValue.Kind); } catch (FormatException) { Console.WriteLine("'{0}' is not in an acceptable format.", dateString); } // Allow a leading space in the date string. try { dateValue = DateTime.ParseExact(dateString, "MM/dd/yyyy hh:mm", enUS, DateTimeStyles.None); Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, dateValue.Kind); } catch (FormatException) { Console.WriteLine("'{0}' is not in an acceptable format.", dateString); } // Parse a string with time zone information. dateString = "05/01/2009 01:30:42 PM -05:00"; try { dateValue = DateTime.ParseExact(dateString, "MM/dd/yyyy hh:mm:ss tt zzz", enUS, DateTimeStyles.None); Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, dateValue.Kind); } catch (FormatException) { Console.WriteLine("'{0}' is not in an acceptable format.", dateString); } // Allow a leading space in the date string. try { dateValue = DateTime.ParseExact(dateString, "MM/dd/yyyy hh:mm:ss tt zzz", enUS, DateTimeStyles.AdjustToUniversal); Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, dateValue.Kind); } catch (FormatException) { Console.WriteLine("'{0}' is not in an acceptable format.", dateString); } // Parse a string represengting UTC. dateString = "2008-06-11T16:11:20.0904778Z"; try { dateValue = DateTime.ParseExact(dateString, "o", CultureInfo.InvariantCulture, DateTimeStyles.None); Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, dateValue.Kind); } catch (FormatException) { Console.WriteLine("'{0}' is not in an acceptable format.", dateString); } try { dateValue = DateTime.ParseExact(dateString, "o", CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind); Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, dateValue.Kind); } catch (FormatException) { Console.WriteLine("'{0}' is not in an acceptable format.", dateString); } // The example displays the following output: // ' 5/01/2009 8:30 AM' is not in an acceptable format. // Converted ' 5/01/2009 8:30 AM' to 5/1/2009 8:30:00 AM (Unspecified). // Converted '5/01/2009 09:00' to 5/1/2009 9:00:00 AM (Unspecified). // '5/01/2009 09:00' is not in an acceptable format. // Converted '05/01/2009 01:30:42 PM -05:00' to 5/1/2009 11:30:42 AM (Local). // Converted '05/01/2009 01:30:42 PM -05:00' to 5/1/2009 6:30:42 PM (Utc). // Converted '2008-06-11T16:11:20.0904778Z' to 6/11/2008 9:11:20 AM (Local). // Converted '2008-06-11T16:11:20.0904778Z' to 6/11/2008 4:11:20 PM (Utc).
Windows 7, Windows Vista SP1 o posterior, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (no se admite Server Core), Windows Server 2008 R2 (se admite Server Core con SP1 o posterior), Windows Server 2003 SP2
.NET Framework no admite todas las versiones de todas las plataformas. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.
Nota