C# DateTime ParseExact

Resumo : neste tutorial, você aprenderá como usar o DateTime ParseExact()método C# para converter um objeto stringem DateTimeum 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 DateTimeobjeto 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:

  1. string s: a representação de string da data e hora a ser convertida.
  2. IFormatProvider? provider: um IFormatProviderobjeto opcional que especifica as informações de formato específicas da cultura usadas para interpretar a sequência de data e hora. Se null, o método usará o provedor de formato padrão para a cultura atual.
  3. System.Globalization.DateTimeStyles styles: um DateTimeStylesvalor 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, 2023Linguagem de código:  C#  ( cs )

Neste exemplo, usamos o ParseExact()método para converter a string de data "05/07/2023"em a DateTimecom 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. O CultureInfo.InvariantCulturemeio é 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 sque representa uma data no formato 15/07/2023. Queremos converter esta string em seu DateTimeobjeto 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 formatsarray. 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 scorresponder a um dos formatos esperados, o método retornará um DateTimevalor 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 FormatExceptionexceçã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 DateTimeobjeto usando o "M/d/yyyy"formato.

Se ParseExact()não for possível analisar a string de entrada com base no formato especificado, uma FormatExceptionexceçã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 FormatExceptionexceção se a string de entrada não corresponder ao especificador de formato de data. Em vez disso, ele retorna truese a conversão for bem-sucedida ou falsenã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: um CultureInfoobjeto 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: um DateTimeStylesvalor 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: um outparâmetro que recebe o DateTimevalor 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 AMLinguagem 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 formatscom 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 CultureInfoobjeto chamado culture com o valor InvariantCulture. Ele garante que TryParseExactanalisará a sequência de datas corretamente, independentemente das configurações culturais do usuário.

Terceiro, defina uma DateTimeStylesvariável chamada stylecom 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 foreachloop que itere cada um dos formatos de data na matriz de formatos. Para cada formato, use o DateTime.TryParseExact()método para analisar a sstring usando o formato, a cultura e o estilo especificados.

Se a conversão for bem-sucedida, o programa grava o DateTimeobjeto resultante no console usando o WriteLine()método. Caso contrário, ele grava uma mensagem de erro no console indicando que a string snã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 seu DateTimeequivalente usando um formato e uma cultura especificados e retornará verdadeiro se a conversão tiver sido bem-sucedida ou falso caso contrário.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *