Resumo : neste tutorial, você aprenderá como usar o DateTime
ParseExact()
método C# para converter um objeto string
em DateTime
um formato com correspondência exata.
Introdução ao método C# DateTime ParseExact()
Se você tiver uma string de data e hora com um formato especificado, poderá convertê-la em um DateTime
objeto usando o ParseExact()
método:
public static DateTime ParseExact (
string s,
IFormatProvider? provider,
System.Globalization.DateTimeStyles styles
);
Linguagem de código: C# ( cs )
O ParseExact()
método leva três parâmetros:
string s
: a representação de string da data e hora a ser convertida.IFormatProvider? provider
: umIFormatProvider
objeto opcional que especifica as informações de formato específicas da cultura usadas para interpretar a sequência de data e hora. Senull
, o método usará o provedor de formato padrão para a cultura atual.System.Globalization.DateTimeStyles styles
: umDateTimeStyles
valor que especifica qualquer informação de estilo adicional a ser usada ao interpretar a sequência de data e hora. Por exemplo, você pode especificar se deseja permitir espaços em branco à esquerda/final, se permite que uma data não tenha ano ou se permite que um horário não tenha segundos.
Por exemplo:
using System.Globalization;
using static System.Console;
var s = "05/07/2023";
var dt = DateTime.ParseExact(
s,
"M/d/yyyy",
CultureInfo.InvariantCulture);
WriteLine(dt.ToLongDateString()); // Sunday, May 7, 2023
Linguagem de código: C# ( cs )
Neste exemplo, usamos o ParseExact()
método para converter a string de data "05/07/2023"
em a DateTime
com o formato M/d/yyyy
.
O ParseExact()
aceita três argumentos:
s
é a string de entrada que representa uma data e hora."M/d/yyyy"
é o formato especificado para analisar a string de entrada s.CultureInfo.InvariantCulture
é a cultura para analisar a string de entrada. OCultureInfo.InvariantCulture
meio é independente da cultura.
Para obter uma lista completa de especificadores personalizados de formato de data e hora, confira esta página .
Às vezes, a sequência de datas pode ter um ou vários formatos possíveis. Para combinar uma string de data com vários formatos possíveis, você pode passar uma matriz de formatos para o segundo argumento do método ParseExact assim:
public static DateTime ParseExact (
string s,
string[] formats,
IFormatProvider? provider,
System.Globalization.DateTimeStyles style
);
Linguagem de código: C# ( cs )
Por exemplo:
using System.Globalization;
using static System.Console;
var s = "15/07/2023";
string[] formats = { "M/d/yyyy", "d/M/yyyy" };
var culture = CultureInfo.InvariantCulture;
var style = DateTimeStyles.None;
try
{
var dt = DateTime.ParseExact(s, formats, culture, style);
WriteLine("Converted '{0}' to {1}.", s, dt);
}
catch (FormatException)
{
WriteLine("Unable to convert '{0}'.", s);
}
Linguagem de código: C# ( cs )
Neste exemplo, temos uma string s
que representa uma data no formato 15/07/2023
. Queremos converter esta string em seu DateTime
objeto correspondente, mas não sabemos em qual formato a data está.
Para lidar com esta situação, chamamos o DateTime.ParseExact()
método com vários formatos especificados no formats
array. Neste caso, temos dois formatos esperados: "M/d/yyyy"
e "d/M/yyyy"
. Isso significa que o método tentará analisar a string de entrada usando ambos os formatos até encontrar uma correspondência.
Se a sequência de entrada s
corresponder a um dos formatos esperados, o método retornará um DateTime
valor que corresponde à sequência de data e hora analisada. Se a string de entrada não corresponder a nenhum dos formatos esperados, o método lançará uma FormatException
exceção.
Neste exemplo, a saída será:
Converted '15/07/2023' to 7/15/2023 12:00:00 AM.
Linguagem de código: texto simples ( texto simples )
indicando que a string foi convertida com sucesso em um DateTime
objeto usando o "M/d/yyyy"
formato.
Se ParseExact()
não for possível analisar a string de entrada com base no formato especificado, uma FormatException
exceção será lançada. Para evitar a exceção, você pode usar o TryParseExact()
método.
Método C# DateTime TryParseExact()
O TryParseExact()
método é igual ao ParseExact()
método, exceto que não lança uma FormatException
exceção se a string de entrada não corresponder ao especificador de formato de data. Em vez disso, ele retorna true
se a conversão for bem-sucedida ou false
não:
public static bool TryParseExact (
string? s,
string? format,
IFormatProvider? provider,
System.Globalization.DateTimeStyles style,
out DateTime result
);
Linguagem de código: C# ( cs )
O TryParseExact()
leva vários parâmetros:
string s
: a representação de string da data e hora a ser convertida.string format
: uma sequência que especifica o formato esperado da sequência de data e hora.CultureInfo culture
: umCultureInfo
objeto que especifica a cultura usada para interpretar a sequência de data e hora. Isso afeta a interpretação de quaisquer especificadores de formato que utilizem informações sensíveis à cultura, como o dia da semana ou o nome do mês.DateTimeStyles styles
: umDateTimeStyles
valor que especifica qualquer informação de estilo adicional a ser usada ao interpretar a sequência de data e hora. Por exemplo, você pode especificar se deseja permitir espaços em branco à esquerda/final, se permite que uma data não tenha ano ou se permite que um horário não tenha segundos.out DateTime result
: umout
parâmetro que recebe oDateTime
valor que corresponde à sequência de data e hora analisada se a conversão for bem-sucedida.
O exemplo a seguir mostra como usar o TryParseExact()
método para analisar uma sequência de datas usando uma lista de formatos:
using System.Globalization;
using static System.Console;
var s = "15/07/2023";
var formats = new string[] { "M/d/yyyy", "d/M/yyyy" };
var culture = CultureInfo.InvariantCulture;
var style = DateTimeStyles.None;
foreach (var format in formats)
{
if (DateTime.TryParseExact(s, format, culture, style, out var dt))
{
WriteLine(dt);
}
else
{
WriteLine($"The string {s} doesn't match the format {format}");
}
}
Linguagem de código: C# ( cs )
Saída:
The string 15/07/2023 doesn't match the format M/d/yyyy
7/15/2023 12:00:00 AM
Linguagem de código: texto simples ( texto simples )
Como funciona.
Primeiro, inicialize a string de data s com o valor 15/07/2023, uma matriz de string formats
com duas strings de formato de data diferentes: "M/d/yyyy"
e "d/M/yyyy"
. Usaremos esses formatos para analisar a string de data s
.
Segundo, declare um CultureInfo
objeto chamado culture com o valor InvariantCulture
. Ele garante que TryParseExact
analisará a sequência de datas corretamente, independentemente das configurações culturais do usuário.
Terceiro, defina uma DateTimeStyles
variável chamada style
com o valor None
. Isso especifica que TryParseExact()
não será necessário nenhum estilo ou sinalizador adicional ao analisar a sequência de datas.
Por fim, use um foreach
loop que itere cada um dos formatos de data na matriz de formatos. Para cada formato, use o DateTime.TryParseExact()
método para analisar a s
string usando o formato, a cultura e o estilo especificados.
Se a conversão for bem-sucedida, o programa grava o DateTime
objeto resultante no console usando o WriteLine()
método. Caso contrário, ele grava uma mensagem de erro no console indicando que a string s
não corresponde ao formato atual.
Resumo
- Use o método C# DateTime
ParseExact()
para converter uma string em um objeto DateTime com o formato de correspondência exata. - Use o método C#
DateTime.TryParseExact()
para converter uma representação de cadeia de caracteres de uma data e hora em seuDateTime
equivalente usando um formato e uma cultura especificados e retornará verdadeiro se a conversão tiver sido bem-sucedida ou falso caso contrário.