Partilhar via


Formatação de data e time para uma cultura específica

The DateTime estrutura fornece métodos que permitem que os aplicativos para executar operações sensíveis à cultura em uma DateTime Digite. Um aplicativo pode usar o DateTimeFormatInfo classe para formatar e exibir um DateTime tipo com base na cultura. Por exemplo, usando ShortDatePattern, a data 1 de fevereiro de 2001 podem ser formatadas sistema autônomo 1/2/2001 para inglês (Estados Unidos), 02/01/2001 para inglês (Reino Unido) "en-GB", cultura, cultura e "en-US".

An DateTimeFormatInfo objeto pode ser criado para uma cultura específica ou para a cultura invariável, mas não para uma cultura neutra. Uma cultura neutra não fornece informações suficientes para exibir o formato de data correto.Uma exceção é lançada se o aplicativo tentar criar um DateTimeFormatInfo objeto usando uma cultura neutra. Para obter informações adicionais e exemplos de uso de DateTime a formatação, consulte Data e cadeias de caracteres de formato de time.

O exemplo de código a seguir exibe a data corrente utilizando ShortDatePattern Quando o CurrentThreadcultura corrente está configurada para inglês (Estados Unidos), "en-US" e, em seguida, alemão (Alemanha), "de-DE".

Imports System
Imports System.Globalization
Imports System.Threading

Public Class FormatDate
   
   Public Shared Sub Main()
      Dim dt As DateTime = DateTime.Now
      ' Sets the CurrentCulture property to U.S. English.
      Thread.CurrentThread.CurrentCulture = New CultureInfo("en-US")
      ' Displays dt, formatted using the ShortDatePattern
      ' and the CurrentThread.CurrentCulture.
      Console.WriteLine(dt.ToString("d"))
      
      ' Creates a CultureInfo for German in Germany.
      Dim ci As New CultureInfo("de-DE")
      ' Displays dt, formatted using the ShortDatePattern
      ' and the CultureInfo.
      Console.WriteLine(dt.ToString("d", ci))
   End Sub
End Class
using System;
using System.Globalization;
using System.Threading;

public class FormatDate
{
   public static void Main()
   {
      DateTime dt = DateTime.Now;
      // Sets the CurrentCulture property to U.S. English.
      Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
      // Displays dt, formatted using the ShortDatePattern
      // and the CurrentThread.CurrentCulture.
      Console.WriteLine(dt.ToString("d"));
      
      // Creates a CultureInfo for German in Germany.
      CultureInfo ci = new CultureInfo("de-DE");
      // Displays dt, formatted using the ShortDatePattern
      // and the CultureInfo.
      Console.WriteLine(dt.ToString("d", ci));
   }
}

Se você executar esse código em 9 de julho de 2001, a saída é exibida da seguinte forma:

7/9/2001
09.07.2001

Trabalhando com zonas time

The DateTime estrutura sempre usa o local fuso horário em comparações e cálculos. Você deve considerar isso ao seu aplicativo utiliza o Parse() e ParseExact() métodos. Esses métodos fornecem sobrecargas que permitem a representação da cadeia de caracteres de uma data e time ao converter um DateTime Digite. Seu aplicativo também pode formatar um DateTime tipo para uma cultura específica. Se um fuso horário não é especificado na seqüência de caracteres passada para esses métodos, eles recuperem analisada data e time sem executar um fuso horário ajuste.A data e time são baseados no sistema operacional fuso horário configuração.Se o aplicativo especificar um deslocamento de fuso horário, esses métodos analisar a cadeia de caracteres de data/time, converter para time universal coordenada (UTC, anteriormente conhecido sistema autônomo time de Greenwich ou GMT) e, em seguida, converter-o para a time no sistema local.

O aplicativo deve usar o ToUniversalTime método para converter uma impressora local DateTime Digite em seu UTC equivalente. Para analisar uma cadeia de caracteres de data/time e convertê-lo para um UTC DateTime tipo, o aplicativo deve usar o DateTimeStyles enumeração valor DateTimeStyles com um a Parse() método ou a ParseExact() método.

O exemplo de código a seguir cria um DateTime tipo para a time local e a converte para o UTC equivalente. Ambos os tipos são convertidos em seqüências de caracteres e gravados em console.Observe que as seqüências de caracteres diferem pelo deslocamento UTC entre local fuso horário e UTC.Estas seqüências de caracteres são convertidas novamente em DateTime tipos usando o ParseExact() método. Para capturar o time informações armazenadas em de zonautcdt, o valor DateTimeStyles DateTimeStyles deve ser especificado sistema autônomo um parâmetro para o ParseExact método. Para obter mais informações sobre o deslocamento UTC para vários fusos horários, consulte GetUtcOffset.

Imports System
Imports System.Globalization
Imports System.Threading

Public Class TimeZoneSample
   Public Shared Sub Main()
      Dim en As New CultureInfo("en-US")
      Thread.CurrentThread.CurrentCulture = en

      ' Creates a DateTime for the local time.
      Dim dt As New DateTime(2001, 7, 13, 4, 0, 0)

      ' Converts the local DateTime to the UTC time.
      Dim utcdt As DateTime = dt.ToUniversalTime()

      ' Defines a custom string format to display the DateTime.
      ' zzz specifies the full time zone offset.
      Dim format As [String] = "MM/dd/yyyy hh:mm:sszzz"

      ' Converts the local time to a string
      ' using the custom format string and display.
      Dim str As [String] = dt.ToString(format)
      Console.WriteLine(str)

      ' Converts the UTC time to a string
      ' using the custom format string and display.
      Dim utcstr As [String] = utcdt.ToString(format)
      Console.WriteLine(utcstr)

      ' Converts the string back to a local DateTime and displays it.
      Dim parsedBack As DateTime = DateTime.ParseExact(str, format, 
            en.DateTimeFormat)
      Console.WriteLine(parsedBack)

      ' Converts the string back to a UTC DateTime and displays it.
      ' If you do not use the DateTime.ParseExact method that takes
      ' a DateTimeStyles.AdjustToUniversal value, the parsed DateTime
      ' will not include the time zone information. 
      Dim parsedBackUTC As DateTime = DateTime.ParseExact(str, format, _
            en.DateTimeFormat, DateTimeStyles.AdjustToUniversal)
      Console.WriteLine(parsedBackUTC)
   End Sub
End Class
using System;
using System.Globalization;
using System.Threading;

public class TimeZoneSample
{
   public static void Main()
   {
      CultureInfo en = new CultureInfo("en-US");
      Thread.CurrentThread.CurrentCulture = en;

      // Creates a DateTime for the local time.
      DateTime dt = new DateTime(2001, 7, 13, 4, 0, 0);

      // Converts the local DateTime to the UTC time.
      DateTime utcdt = dt.ToUniversalTime();

      // Defines a custom string format to display the DateTime value.
      // zzzz specifies the full time zone offset.
      String format = "MM/dd/yyyy hh:mm:sszzz";

      // Converts the local DateTime to a string 
      // using the custom format string and display.
      String str = dt.ToString(format);
      Console.WriteLine(str);

      // Converts the UTC DateTime to a string 
      // using the custom format string and display.
      String utcstr = utcdt.ToString(format);
      Console.WriteLine(utcstr);

      // Converts the string back to a local DateTime and displays it.
      DateTime parsedBack =
            DateTime.ParseExact(str,format,en.DateTimeFormat);
      Console.WriteLine(parsedBack);

      // Converts the string back to a UTC DateTime and displays it.
      // If you do not use the DateTime.ParseExact method that takes
      // a DateTimeStyles.AdjustToUniversal value, the parsed DateTime
      // object will not include the time zone information.
      DateTime parsedBackUTC = DateTime.ParseExact(str,format, _
            en.DateTimeFormat, DateTimeStyles.AdjustToUniversal);
      Console.WriteLine(parsedBackUTC);
   }
}

Este código produz a seguinte saída:

07/13/2001 04:00:00-07:00
07/13/2001 11:00:00-07:00
7/13/2001 4:00:00 AM
7/13/2001 11:00:00 AM

Trabalhando com membros de DateTime

Quando você usa o DateTime estruturar, esteja ciente de que sistema autônomo membros sistema autônomo Day baseiam-se no calendário gregoriano. Mesmo que seu aplicativo altera o calendário corrente ou permite que o usuário alterar a data e configurações de time por meio do regionais e opções de linguagem no painel de controle, o calendário gregoriano ainda será usado para executar os cálculos para DateTime métodos, que impede a aritmética executada por esses métodos de corrompido por configurações de usuário. Se você quiser que o aplicativo para realizar sensíveis à cultura data e time operações com base no calendário corrente, o aplicativo deve usar o Calendar propriedade para chamar sistema autônomo métodos fornecidos pela Calendar classe, sistema autônomo GetDayOfMonth. Para obter um exemplo de como a diferença de valores recuperados pelo DateTime os membros e a Calendar membros, consulte Usando calendários para culturas específicas.

Ao trabalhar com o DateTime estruturar, esteja ciente de que um DateTime tipo é um valor imutável. Portanto, métodos, sistema autônomo AddDays recuperar uma nova DateTime valor em vez de incrementar um valor existente. O exemplo a seguir ilustra como incrementar um DateTime Digite um dia usando a demonstrativo dt = dt.AddDays(1).

Imports System
Imports System.Globalization
Imports System.Threading
Imports Microsoft.VisualBasic

Public Class TestClass
   
   Public Shared Sub Main()
      Thread.CurrentThread.CurrentCulture = New CultureInfo("en-US")
      
      Dim dt As DateTime = DateTime.Now
      Console.WriteLine(ControlChars.Newline + " Today is {0}", _
         DateTime.Now.ToString("d"))
      
      ' Increments dt by one day.
      dt = dt.AddDays(1)
      Console.WriteLine(ControlChars.Newline + " Tomorrow is {0}", _
         dt.ToString("d"))
   End Sub
End Class
using System;
using System.Globalization;
using System.Threading;

public class TestClass
{
   public static void Main()
   {
      Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");

      DateTime dt = DateTime.Now;
      Console.WriteLine("Today is {0}", DateTime.Now.ToString("d"));

      // Increments dt by one day.
      dt = dt.AddDays(1);
      Console.WriteLine("Tomorrow is {0}", dt.ToString("d"));

   }
}

Se você executar esse código em 3 de agosto de 2001, ele exibirá a seguinte saída:

Today is 8/3/2001
Tomorrow is 8/4/2001

Consulte também

Conceitos

Seqüências de Caracteres de Formatação de Data e Hora

Outros recursos

Codificação e localização