Compartilhar via


Análisando Sequências de Caracteres de Data e Horário

Métodos de análise convertem a representação equivalente da sequência de caracteres de data e hora de um objeto DateTime. Os métodos Parse e TryParse convertem qualquer uma das várias representações comuns de data e hora. O ParseExact e TryParseExact métodos convertem uma representação de seqüência de caracteres que está de acordo com o padrão especificado por um data e hora em formato de seqüência de caracteres. (Consulte os tópicos sobre data padrão e seqüências de formato de hora e personalizada Data and time format strings.)

Análise é influenciada pelas propriedades de um provedor de formato que fornece informações como as sequências de caracteres usadas como separadores de data e hora, e os nomes dos meses, dias e eras. O provedor de formato é o atual objeto DateTimeFormatInfo, que é fornecido implicitamente pela cultura de segmento atual ou explicitamente pelo parâmetro IFormatProvider de um método de análise. Para o parâmetro IFormatProvider, especifique um objeto CultureInfo, que representa uma cultura, ou um objeto DateTimeFormatInfo.

A representação de sequência de caracteres de uma data a ser analisada deve incluir o mês e pelo menos um dia ou ano. O representação de sequência de caracteres de um tempo deve incluir a hora e pelo menos os minutos ou o designador AM/PM. No entanto, análise fornece valores padrão para componentes omitidos se for possível. Padrões de data ausentes para a data atual, padrões de ano ausentes para o ano atual, padrões de dia do mês ausentes para o primeiro dia do mês, e padrões de tempo ausentes para a meia-noite.

Se a representação de sequência de caracteres especifica somente um horário, a análise retorna um objeto DateTime com suas propriedades Year,Month e Day definidas para os valores da propriedade Today correspondentes. No entanto, se a constante NoCurrentDateDefault for especificada no método de análise, as propriedades resultantes de ano, mês e dia serão definidas para o valor 1.

Além de um componente de data e hora, a representação de sequência de caracteres de uma data e hora pode incluir um deslocamento que indica a diferença de tempo em relação ao Tempo Universal Coordenado (UTC). Por exemplo, a sequência " 2/14/2007 5:32:00-7: 00" define uma vez que é sete horas anteriores ao horário do UTC. Se um deslocamento for omitido a partir de representação de sequência de caracteres de um tempo, a análise retorna um objeto DateTime com sua propriedade Kind definida como DateTimeKind.Unspecified. Se um deslocamento for especificado, a análise retorna um objeto DateTime com sua propriedade Kind definida como Local e seu valor ajustado para a zona de tempo local do seu computador. Você pode modificar esse comportamento usando uma constante DateTimeStyles com o método de análise.

O provedor de formato também é usado para interpretar uma data numérica ambígua. Por exemplo, não é certo quantos componentes da data representados pela sequência " 02/03/04 " são o mês, o dia e o ano. Nesse caso, os componentes são interpretados de acordo com a ordem dos formatos de data semelhantes no provedor de formato.

Analisar

O exemplo de código a seguir ilustra o uso do método Parse para converter uma sequência de caracteres em um DateTime. Este exemplo usa a cultura associada com o segmento atual para realizar a análise. Se a CultureInfo associada a cultura atual não pode analisar a sequência de caracteres de entrada, é apresentada uma FormatException.

Dim MyString As String = "Jan 1, 2009"
Dim MyDateTime As DateTime = DateTime.Parse(MyString)
Console.WriteLine(MyDateTime)
' Displays the following output on a system whose culture is en-US:
'       1/1/2009 12:00:00 AM
string MyString = "Jan 1, 2009";
DateTime MyDateTime = DateTime.Parse(MyString);
Console.WriteLine(MyDateTime);
// Displays the following output on a system whose culture is en-US:
//       1/1/2009 12:00:00 AM

Você também pode especificar um conjunto CultureInfo em uma das culturas definidas por esse objeto, ou você pode especificar um dos objetos padrão DateTimeFormatInfo retornados pela propriedade CultureInfo.DateTimeFormat. O exemplo de código a seguir usa um provedor de formato para analisar uma sequência em alemão em um DateTime. Um CultureInfo representando a cultura de-DE é definida e transmitida com a sequência de caracteres que está sendo analisada para garantir o sucesso da análise dessa sequência específica. Isso impede qualquer configuração que está na CurrentCulture de CurrentThread.

Imports System.Globalization

Module Example
   Public Sub Main()
      Dim MyCultureInfo As CultureInfo = new CultureInfo("de-DE")
      Dim MyString As String = "12 Juni 2008"
      Dim MyDateTime As DateTime = DateTime.Parse(MyString, MyCultureInfo)
      Console.WriteLine(MyDateTime)
   End Sub
End Module
' The example displays the following output:
'       6/12/2008 12:00:00 AM
using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      CultureInfo MyCultureInfo = new CultureInfo("de-DE");
      string MyString = "12 Juni 2008";
      DateTime MyDateTime = DateTime.Parse(MyString, MyCultureInfo);
      Console.WriteLine(MyDateTime);
   }
}
// The example displays the following output:
//       6/12/2008 12:00:00 AM

No entanto, embora você possa usar sobrecargas do método Parse para especificar os provedores de formato personalizado, o método não oferece suporte ao uso de provedores de formato diferentes do padrão. Para analisar uma data e hora expressos em um formato diferente do padrão, use o método ParseExact.

O exemplo de código a seguir usa a enumeração DateTimeStyles para especificar que as informações de data e hora atuais não devem ser adicionadas ao DateTime para campos que não definem a sequência de caracteres.

Imports System.Globalization

Module Example
   Public Sub Main()
      Dim MyCultureInfo As CultureInfo = new CultureInfo("de-DE")
      Dim MyString As String = "12 Juni 2008"
      Dim MyDateTime As DateTime = DateTime.Parse(MyString, MyCultureInfo, _
                                   DateTimeStyles.NoCurrentDateDefault)
      Console.WriteLine(MyDateTime)
   End Sub
End Module
' The example displays the following output if the current culture is en-US:
'       6/12/2008 12:00:00 AM
using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      CultureInfo MyCultureInfo = new CultureInfo("de-DE");
      string MyString = "12 Juni 2008";
      DateTime MyDateTime = DateTime.Parse(MyString, MyCultureInfo, 
                                           DateTimeStyles.NoCurrentDateDefault);
      Console.WriteLine(MyDateTime);
   }
}
// The example displays the following output if the current culture is en-US:
//      6/12/2008 12:00:00 AM

ParseExact

O método DateTime.ParseExact converte uma sequência de caracteres que esteja de acordo com um padrão de sequência especificado para um objeto DateTime. Quando uma sequência de caracteres que não é do formulário especificado é passada para este método, uma FormatException é acionada. Você pode especificar um dos especificadores de formato de data e hora padrão ou uma combinação limitada dos especificadores de formato personalizados de data e de hora. Usando os especificadores de formato personalizado, você tem a posibilidade de construir uma sequência personalizada de reconhecimento. Para obter uma explicação dos especificadores, consulte os tópicos sobre data padrão e seqüências de formato de hora e personalizada Data and time format strings.

Cada sobrecarga do método ParseExact também tem um parâmetro IFormatProvider que normalmente fornece informações específicas da cultura sobre a formatação da sequência de caracteres. Normalmente, esse objeto IFormatProvider é um objeto CultureInfo que representa uma cultura padrão ou um objeto DateTimeFormatInfo que é retornado pela propriedade CultureInfo.DateTimeFormat. No entanto, diferentemente de outras funções de análise de data e hora, esse método também oferece suporte a um IFormatProvider que define uma data e uma hora diferentes do formato padrão.

Em exemplo de código a seguir, o método ParseExact recebe um objeto de sequência de caracteres para analisar, seguido por um especificador de formato, seguido por um objeto CultureInfo. Este método ParseExact só pode analisar as sequências de caracteres que apresentam o padrão de data por extenso da cultura en-US.

Imports System.Globalization

Module Example
   Public Sub Main()
      Dim MyCultureInfo As CultureInfo = new CultureInfo("en-US")
      Dim MyString() As String = {" Friday, April 10, 2009", "Friday, April 10, 2009"}
      For Each dateString As String In MyString
         Try
            Dim MyDateTime As DateTime = DateTime.ParseExact(dateString, "D", _
                                                             MyCultureInfo)
            Console.WriteLine(MyDateTime)
         Catch e As FormatException
            Console.WriteLine("Unable to parse '{0}'", dateString)
         End Try
      Next
   End Sub
End Module
' The example displays the following output:
'       Unable to parse ' Friday, April 10, 2009'
'       4/10/2009 12:00:00 AM
using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      CultureInfo MyCultureInfo = new CultureInfo("en-US");
      string[] MyString = {" Friday, April 10, 2009", "Friday, April 10, 2009"};
      foreach (string dateString in MyString)
      {
         try {
            DateTime MyDateTime = DateTime.ParseExact(dateString, "D", MyCultureInfo);
            Console.WriteLine(MyDateTime);
         }
         catch (FormatException) {
            Console.WriteLine("Unable to parse '{0}'", dateString);
         }
      }
   }
}
// The example displays the following output:
//       Unable to parse ' Friday, April 10, 2009'
//       4/10/2009 12:00:00 AM

Consulte também

Conceitos

Tipos de Formatação

Digite a conversão na.NET Framework

Outros recursos

Analisando sequências de caracteres