Datas, horas e fusos horários

Além da estrutura DateTime básica, o .NET fornece as seguintes classes que dão suporte para trabalhar com fusos horários:

  • TimeZone

    Use esta classe para trabalhar com o fuso horário local do sistema e a zona UTC (Tempo Universal Coordenado). A funcionalidade da classe TimeZone é amplamente substituída pela classe TimeZoneInfo.

  • TimeZoneInfo

    Use essa classe para trabalhar com qualquer fuso horário que esteja 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) em relação ao horário UTC é conhecido. A estrutura DateTimeOffset combina um valor de data e hora com o deslocamento desse horário em relação ao UTC. Devido à sua relação com o UTC, um valor individual de data e hora identifica, sem ambiguidade um único ponto no tempo. Isso aumenta a portabilidade de um computador para outro de um valor de DateTimeOffset em relação a um valor de DateTime.

Do .NET 6 em diante, os seguintes tipos estão disponíveis:

  • DateOnly

    Use essa estrutura ao trabalhar com um valor que representa apenas uma data. A data representa o dia inteiro, desde o início do dia até o final. DateOnly tem um intervalo de 0001-01-01 até 9999-12-31. E esse tipo representa a combinação de mês, dia e ano sem uma hora específica. Se você usava um tipo DateTime em seu código para representar uma data que desconsiderava a hora, use agora esse tipo.

  • TimeOnly

    Use essa estrutura para representar uma hora sem uma data. A hora representa as horas, os minutos e os segundos de um dia não específico. TimeOnly tem um intervalo de 00:00:00.0000000 a 23:59:59.9999999. Esse tipo pode ser usado para substituir tipos DateTime e TimeSpan no código quando você usou esses tipos para representar uma hora.

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

Nesta seção

Visão geral do fuso horário
Aborda 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, DateTimeOffset e TimeZoneInfo ao lidar com os dados de data e hora.

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

Como: enumerar os fusos horários presentes em um computador
Fornece exemplos que enumeram os fusos horários definidos no Registro de um computador e que permitem aos usuários selecionar um fuso horário predefinido em uma lista.

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

Como: criar uma instância de um objeto TimeZoneInfo
Descreve como criar uma instância de um objeto TimeZoneInfo no Registro do sistema local.

Criando uma instância de um objeto DateTimeOffset
Discute as maneiras de criar uma instância de um objeto DateTimeOffset e maneiras de converter um valor DateTime em um valor DateTimeOffset.

Como: criar fusos horários sem regras de ajuste
Descreve como criar um fuso horário personalizado que não dê suporte à transição bidirecional do horário de verão.

Como: criar fusos horários com regras de ajuste
Descreve como criar um fuso horário personalizado que dê suporte a uma ou mais transições bidirecionais do horário de verão.

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

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

Como: restaurar fusos horários de um recurso inserido
Descreve como criar uma instância de fusos horários personalizados que foram salvos em um arquivo de recurso inserido.

Executando operações aritméticas com datas e horas
Discute os problemas envolvidos em adicionar, subtrair e comparar valores DateTime e DateTimeOffset.

Como: usar fusos horários em aritmética de data e hora
Aborda como realizar a aritmética de data e hora que reflete as regras de ajuste de um fuso horário.

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

Convertendo horários entre fusos horários
Descreve como converter horários de um fuso horário para outro.

Como: resolver horários ambíguos
Descreve como resolver um horário ambíguo, mapeando-o para o horário padrão do fuso horário.

Como: permitir que os usuários resolvam horários ambíguos
Descreve como permitir que um usuário determine o mapeamento entre um horário local ambíguo e o Tempo Universal Coordenado.

Referência

System.TimeZoneInfo