Ler em inglês

Partilhar via


Datas, horas e fusos horários

O .NET fornece tipos que representam datas, horas e fusos horários. Este artigo descreve esses tipos.

Além da estrutura básica de DateTime, o .NET fornece as seguintes classes que oferecem suporte ao trabalho com fusos horários:

  • TimeZoneInfo

    Use essa classe para trabalhar com qualquer fuso horário predefinido em um sistema, para criar novos fusos horários e para converter facilmente datas e horas de um fuso horário para outro. Para novos desenvolvimentos, use a classe TimeZoneInfo em vez da classe TimeZone.

  • DateTimeOffset

    Use essa estrutura para trabalhar com datas e horas cujo deslocamento (ou diferença) do UTC é conhecido. A estrutura DateTimeOffset combina um valor de data e hora com o deslocamento dessa hora em relação ao UTC. Devido à sua relação com o UTC, um valor individual de data e hora identifica inequivocamente um único ponto no tempo. Isso torna um valor DateTimeOffset mais portátil de um computador para outro do que um valor DateTime.

As seguintes classes são para apoiar o trabalho com o tempo:

  • TimeSpan

    Use essa estrutura para representar um intervalo de tempo, como uma quantidade de tempo decorrido ou a diferença entre duas datas.

  • TimeOnly

    Use essa estrutura para representar uma hora sem data. O tempo representa as horas, minutos e segundos de um dia não específico. TimeOnly tem uma gama de 00:00:00.0000000 para 23:59:59.9999999. Esse tipo pode ser usado para substituir os tipos DateTime e TimeSpan no seu código quando usou esses tipos para representar um instante. Para obter mais informações, consulte Como usar as estruturas DateOnly e TimeOnly.

    Importante

    TimeOnly não está disponível para o .NET Framework.

  • TimeProvider

    Esta é uma classe base que fornece uma abstração de tempo. Uma maneira comum de verificar a hora atual é usando DateTime.UtcNow ou DateTimeOffset.UtcNow. No entanto, esses tipos não fornecem nenhum controle sobre o que é considerado "agora". Por que você gostaria de controlar isso? Testabilidade. Por exemplo, considere que você está escrevendo um aplicativo de rastreamento de eventos que fornece lembretes 1 dia antes do evento. A lógica da aplicação é verificar a hora do evento a cada hora e alertar o utilizador quando faltar 24 horas para o evento. Ao escrever seus testes para o aplicativo, você forneceria seu próprio tipo que envolve DateTimeOffset.UtcNow para testar essa lógica, mas agora o .NET fornece essa classe de abstração para você.

    Para obter mais informações, consulte O que é TimeProvider.

    O tipo TimeProvider está incluído no .NET.

    Para o .NET Framework e o .NET Standard, TimeProvider é fornecido pelo pacote Microsoft.Bcl.TimeProvider NuGet.

Existem as seguintes classes para apoiar o trabalho com datas:

  • DateOnly

    Use essa estrutura ao trabalhar com um valor que representa apenas uma data. A data representa todo o dia, desde o início do dia até ao fim. DateOnly tem uma gama de 0001-01-01 através de 9999-12-31. E esse tipo representa a combinação de mês, dia e ano sem um horário específico. Se você usou anteriormente um tipo de DateTime em seu código para representar uma data que desconsiderou a hora, use esse tipo em seu lugar. Para obter mais informações, consulte Como usar as estruturas DateOnly e TimeOnly.

    Importante

    DateOnly não está disponível para o .NET Framework.

A próxima seção fornece as informações necessárias para trabalhar com fusos horários e criar aplicativos com reconhecimento de fuso horário que podem converter datas e horas de um fuso horário para outro.

Nesta secção

Visão geral do fuso horário
Discute a terminologia, os conceitos e os problemas envolvidos na criação de aplicativos com reconhecimento de fuso horário.

Escolhendo entre DateTime, DateTimeOffset, TimeSpan e TimeZoneInfo
Discute quando usar os tipos DateTime, DateTimeOffsete TimeZoneInfo ao trabalhar com dados de data e hora.

Localizando os fusos horários definidos em um sistema local
Descreve como enumerar os fusos horários encontrados em um sistema local.

Como: Enumerar fusos horários presentes em um computador
Fornece exemplos que enumeram os fusos horários definidos no registro de um computador e que permitem que os usuários selecionem um fuso horário predefinido de uma lista.

Como acessar os objetos de fuso horário local e UTC predefinidos
Descreve como acessar o Tempo Universal Coordenado e o fuso horário local.

Como instanciar um objeto TimeZoneInfo
Descreve como instanciar um objeto TimeZoneInfo do registro do sistema local.

Instanciando um objeto DateTimeOffset
Discute as maneiras pelas quais um objeto DateTimeOffset pode ser instanciado e as maneiras pelas quais um valor DateTime pode ser convertido em um valor DateTimeOffset.

Como criar fusos horários sem regras de ajuste
Descreve como criar um fuso horário personalizado que não suporta a transição de e para o horário de verão.

Como criar fusos horários com regras de ajuste
Descreve como criar um fuso horário personalizado que ofereça suporte a uma ou mais transições de e para o horário de verão.

Salvar e restaurar fusos horários
Descreve TimeZoneInfo suporte para serialização e desserialização de dados de fuso horário e ilustra alguns dos cenários nos quais esses recursos podem ser usados.

Como guardar fusos horários para um recurso incorporado
Descreve como criar um fuso horário personalizado e salvar suas informações em um arquivo de recurso.

Como restaurar fusos horários a partir de um de recursos incorporado
Descreve como instanciar fusos horários personalizados que foram salvos em um arquivo de recurso incorporado.

Realização de operações aritméticas com datas e horas
Aborda as questões envolvidas na adição, subtração e comparação de valores DateTime e DateTimeOffset.

Como utilizar fusos horários na aritmética das datas e horas
Discute como executar aritmética de data e hora que reflete as regras de ajuste de fuso horário.

Convertendo entre DateTime e DateTimeOffset
Descreve como converter entre valores DateTime e DateTimeOffset.

Conversão de horários entre fusos horários
Descreve como converter horários de um fuso horário para outro.

Como resolver horas ambíguas
Descreve como resolver uma hora ambígua mapeando-a para a hora padrão do fuso horário.

Como: Permitir que os usuários resolvam tempos ambíguos
Descreve como permitir que um usuário determine o mapeamento entre uma hora local ambígua e o Tempo Universal Coordenado.

Referência

System.TimeZoneInfo