Compartir a través de


Analizar cadenas de fecha y hora

Los métodos de análisis convierten la representación de cadena de una fecha y hora en un objeto DateTime equivalente. Los métodos Parse y TryParse convierten cualquier representación de una serie de representaciones comunes de fecha y hora. Los métodos ParseExact y TryParseExact convierten una representación de cadena que se ajusta exactamente al modelo especificado por una cadena de formato de fecha y hora.

El análisis se ve influenciado por las propiedades de un proveedor de formato que proporciona información como, por ejemplo, las cadenas utilizadas para los separadores de fecha y hora y los nombres de los meses, días y eras. El proveedor de formato es el objeto DateTimeFormatInfo actual, proporcionado implícitamente por la referencia cultural del subproceso actual o explícitamente por el parámetro IFormatProvider de un método de análisis. Para el parámetro IFormatProvider, especifique un objeto CultureInfo, que representa una referencia cultural o un objeto DateTimeFormatInfo.

La representación de cadena de una fecha que vaya a analizarse deberá incluir el mes y, por lo menos, un día o año. La representación de cadena de una hora deberá incluir la hora y, por lo menos, los minutos o el designador a.m./p.m. No obstante, si es posible, el análisis proporciona valores predeterminados para los componentes omitidos. Si falta una fecha, se utiliza el valor predeterminado de fecha actual; si falta un año, el año actual; si falta un día del mes, el primer día del mes; y si falta una hora, la medianoche.

Si la representación de cadena sólo especifica una hora, el análisis devuelve un objeto DateTime con las propiedades Year, Month y Day establecidas en los valores correspondientes a la propiedad Today. Sin embargo, si en el método de análisis se especifica la constante NoCurrentDateDefault, las propiedades de año, mes y día resultantes se establecen en el valor 1.

Si en la representación de cadena de una hora se omite la zona horaria, el análisis devuelve un objeto DateTime con la propiedad Kind establecida en Unspecified. Si la zona horaria se especifica, por ejemplo, con un desplazamiento de zona horaria "-07: 00", el análisis devuelve un objeto DateTime con la propiedad Kind establecida en Local y su valor ajustado en la zona de hora local del equipo. Puede modificar este comportamiento utilizando una constante DateTimeStyles con el método de análisis.

El proveedor de formato también se utiliza para interpretar una fecha numérica ambigua. Por ejemplo, no queda claro qué componentes de la fecha representados por la cadena "02/03/04" corresponden al mes, al día y al año. En este caso, los componentes se interpretan según el orden de formatos de fecha similares del proveedor de formato.

Parse

En el ejemplo de código siguiente se ilustra el uso del método Parse para convertir una cadena en DateTime. En este ejemplo, para realizar el análisis, se utiliza la referencia cultural asociada al subproceso actual. Si el objeto CultureInfo asociado a la referencia cultural actual no puede analizar la cadena de entrada, se produce una FormatException.

Dim MyString As String = "Jan 1, 2002"
Dim MyDateTime As DateTime = DateTime.Parse(MyString)
Console.WriteLine(MyDateTime)
string MyString = "Jan 1, 2002";
DateTime MyDateTime = DateTime.Parse(MyString);
Console.WriteLine(MyDateTime);

También se puede especificar un objeto CultureInfo establecido en una de las referencias culturales que define dicho objeto. En el ejemplo de código siguiente se utiliza un proveedor de formato para analizar una cadena alemana en un objeto DateTime. Un objeto CultureInfo que representa la referencia cultural de-DE se define y se pasa con la cadena que se está analizando para garantizar el análisis correcto de esta cadena concreta. Esto descarta el valor que tenga CurrentCulture de CurrentThread.

Imports System.Globalization

Dim MyCultureInfo As CultureInfo = new CultureInfo("de-DE")
Dim MyString As String = "12 Juni 2002"
Dim MyDateTime As DateTime = DateTime.Parse(MyString, MyCultureInfo)
Console.WriteLine(MyDateTime)
using System.Globalization;

CultureInfo MyCultureInfo = new CultureInfo("de-DE");
string MyString = "12 Juni 2002";
DateTime MyDateTime = DateTime.Parse(MyString, MyCultureInfo);
Console.WriteLine(MyDateTime);

En el ejemplo de código siguiente se utiliza la enumeración DateTimeStyles para especificar que la información de fecha y hora actual no se debe agregar al objeto DateTime en los campos que no defina la cadena.

Imports System.Globalization

Dim MyCultureInfo As CultureInfo = new CultureInfo("de-DE")
Dim MyString As String = "12 Juni 2002"
Dim MyDateTime As DateTime = DateTime.Parse(MyString, MyCultureInfo, DateTimeStyles.NoCurrentDateDefault)
Console.WriteLine(MyDateTime)
using System.Globalization;

CultureInfo MyCultureInfo = new CultureInfo("de-DE");
string MyString = "12 Juni 2002";
DateTime MyDateTime = DateTime.Parse(MyString, MyCultureInfo, DateTimeStyles.NoCurrentDateDefault);
Console.WriteLine(MyDateTime);

ParseExact

El método ParseExact sólo convierte en objeto DateTime el modelo de cadena especificado. Cuando se pasa a este método una cadena que no tiene el formato especificado, se produce una FormatException. Se puede definir uno de los especificadores de formato de fecha y hora estándar o una combinación limitada de los especificadores de formato de fecha y hora personalizados. Si se usan los especificadores de formato personalizados, se puede construir una cadena de reconocimiento personalizada. Para obtener información sobre los especificadores, vea la sección Cadenas de formato de fecha y hora.

En el ejemplo de código siguiente, se pasa al método ParseExact un objeto de cadena que se debe analizar, seguido de un especificador de formato, seguido de un objeto CultureInfo. Este método ParseExact sólo puede analizar cadenas que muestren el modelo de fecha larga de la referencia cultural en-US.

Imports System.Globalization

Dim MyCultureInfo As CultureInfo = new CultureInfo("en-US")
Dim MyString As String = "Tuesday, April 10, 2001"
Dim MyDateTime As DateTime = DateTime.ParseExact(MyString, "D", MyCultureInfo)
Console.WriteLine(MyDateTime)
using System.Globalization;

CultureInfo MyCultureInfo = new CultureInfo("en-US");
string MyString = " Tuesday, April 10, 2001";
DateTime MyDateTime = DateTime.ParseExact(MyString, "D", MyCultureInfo);
Console.WriteLine(MyDateTime);

Vea también

Otros recursos

Analizar cadenas
Aplicar formato a tipos
Convertir tipos