Visão geral de fusos horários

 

O TimeZoneInfo classe simplifica a criação de aplicativos com reconhecimento de fuso horário. O TimeZone suporta trabalhar com o fuso horário local e o tempo Universal Coordenado (UTC). O TimeZoneInfo classe oferece suporte a ambos esses fusos, bem como qualquer fuso horário cujas informações sejam predefinido no registro. Você também pode usar TimeZoneInfo para definir fusos horários personalizados que o sistema não tem nenhuma informação sobre.

Um fuso horário é uma região geográfica na qual o mesmo horário é usado. Normalmente, mas nem sempre, os fusos horários adjacentes diferem em uma hora. A hora em cada um dos fusos horários do mundo pode ser expressa como uma diferença do Tempo Universal Coordenado (UTC).

Muitos dos fusos horários do mundo permitem horário de verão. O horário de verão tenta maximizar as horas do dia com sol adiantando o horário em uma hora na primavera ou no começo do verão e retornando ao horário normal (ou padrão) no final do verão ou no outono. Essas alterações de/para o horário padrão são conhecidas como regras de ajuste.

A transição de/para o horário de verão em um determinado fuso horário pode ser definida por uma regra de ajuste fixa ou flutuante. Uma regra de ajuste fixa define uma data específica na qual a transição de/para o horário de verão ocorre todos os anos. Por exemplo, uma transição do horário de verão para o horário padrão que ocorre todos os anos em 25 de outubro segue uma regra de ajuste fixa. Muito mais comuns são as regras de ajuste flutuante, que definem um dia específico de uma semana específica de um mês específico para a transição de/para o horário de verão. Por exemplo, uma transição do horário padrão para o horário de verão que ocorre no terceiro domingo de março segue uma regra de ajuste flutuante.

Para os fusos horários que oferecem suporte às regras de ajuste, a transição de/para o horário de verão cria dois tipos de horários anômalos: horários inválidos e horários ambíguos. Um horário inválido é um horário inexistente criado pela transição do horário padrão para o horário de verão. Por exemplo, se essa transição ocorre em um determinado dia às 2:00 e faz com que o tempo mude para 3:00, cada intervalo de tempo entre 2:00 A.M. e 2:59:99 A.M. é inválido. Um horário ambíguo é aquele que pode ser mapeado para dois horários diferentes em um único fuso horário. Ele é criado pela transição do horário de verão para o horário padrão. Por exemplo, se essa transição ocorre em um determinado dia às 2:00 e faz com que o tempo mude para 1:00, cada intervalo de tempo entre 1:00 A.M. e 1:59:99 A.M. pode ser interpretada como uma hora padrão ou um horário de verão.

A tabela a seguir define os termos que geralmente são usados ao trabalhar com fusos horários e ao desenvolver aplicativos com reconhecimento de fuso horário.

Termo

Definição

Regra de ajuste

Uma regra que define quando ocorre a transição do horário padrão para o horário de verão e o retorno do horário de verão para o horário padrão. Cada regra de ajuste possui uma data de início e término que define quando a regra está em vigor (por exemplo, a regra de ajuste está no lugar de 1 de janeiro de 1986 a 31 de dezembro de 2006), um delta (a quantidade de tempo pelo qual o tempo padrão é alterado como resultado da aplicação da regra de ajuste) e informações sobre a data e hora específicas que as transições devem ocorrer durante o período de ajuste. As transições podem seguir uma regra fixa ou uma regra flutuante.

Horário ambíguo

Um horário que pode ser mapeado para dois horários diferentes em um único fuso horário. Ocorre quando o horário do relógio é atrasado, como durante a transição do horário de verão de um fuso horário para seu horário padrão. Por exemplo, se essa transição ocorre em um determinado dia às 2:00 e faz com que o tempo mude para 1:00, cada intervalo de tempo entre 1:00 A.M. e 1:59:99 A.M. pode ser interpretada como uma hora padrão ou um horário de verão.

Regra fixa

Uma regra de ajuste que define uma data específica para a transição de/para o horário de verão. Por exemplo, uma transição do horário de verão para o horário padrão que ocorre todos os anos em 25 de outubro segue uma regra de ajuste fixa.

Regra flutuante

Uma regra de ajuste que define um dia específico de uma semana específica de um mês específico para a transição de/para o horário de verão. Por exemplo, uma transição do horário padrão para o horário de verão que ocorre no terceiro domingo de março segue uma regra de ajuste flutuante.

Horário inválido

Um horário inexistente que é um artefato da transição do horário padrão para o horário de verão. Ocorre quando o horário do relógio é adiantado, como durante a transição do horário padrão de um fuso horário para seu horário de verão. Por exemplo, se essa transição ocorre em um determinado dia às 2:00 e faz com que o tempo mude para 3:00, cada intervalo de tempo entre 2:00 A.M. e 2:59:99 A.M. é inválido.

Horário de transição

Informações sobre uma mudança de horário específica, como a mudança do horário de verão para o horário padrão ou vice-versa, em um determinado fuso horário.

No .NET Framework, um TimeZoneInfo objeto representa um fuso horário. O TimeZoneInfo classe inclui uma GetAdjustmentRules método que retorna uma matriz de TimeZoneInfo.AdjustmentRule objetos. Cada elemento dessa matriz fornece informações sobre a transição para e a partir do horário de verão para um período de tempo específico. (Para fusos horários que não oferecem suporte a horário de verão, o método retorna uma matriz vazia.) Cada TimeZoneInfo.AdjustmentRule objeto tem um DaylightTransitionStart e um DaylightTransitionEnd propriedade que define a determinada data e hora da transição para e a partir do horário de verão. O IsFixedDateRule propriedade indica se essa transição é fixa ou flutuante.

O .NET Framework se baseia em informações de fuso horário fornecido pelo sistema operacional Windows e armazenadas no registro. Devido ao número de fusos horários da Terra, nem todos os fusos horários existentes são representados no registro. Além disso, como o registro é uma estrutura dinâmica, fusos horários predefinidos podem ser adicionados a ou removidos dele. Finalmente, o registro não contém necessariamente dados históricos fuso horário. Por exemplo, no Windows XP o registro contém dados sobre apenas um único conjunto de ajustes de fuso horário. O Windows Vista oferece suporte a dados dinâmicos de fusos horários, o que significa que um único fuso horário pode ter várias regras de ajuste que se aplicam a intervalos específicos de anos. No entanto, a maioria dos fusos horários são definidos no Windows Vista do registro e suporte a horário de verão tem somente uma ou duas regras de ajuste predefinidas.

A dependência da TimeZoneInfo classe no registro significa que um aplicativo com reconhecimento de fuso horário não pode garantir que um determinado fuso horário esteja definido no registro. Como resultado, a tentativa de criar uma instância de um fuso horário específico (que não seja o fuso horário local ou o fuso horário que representa o UTC) deve usar tratamento de exceção. Ela também deve fornecer algum método de permitir que o aplicativo continue se necessário TimeZoneInfo objeto não pode ser instanciado a partir do registro.

Para manipular a ausência de um fuso horário necessário, a TimeZoneInfo classe inclui uma CreateCustomTimeZone método, que você pode usar para criar fusos horários personalizados que não são encontrados no registro. Para obter detalhes sobre a criação de um fuso horário personalizado, consulte Como criar fusos horários sem regras de ajuste e Como criar fusos horários com regras de ajuste. Além disso, você pode usar o ToSerializedString método para converter um fuso horário recém-criado em uma cadeia de caracteres e salvá-la em um armazenamento de dados (como um banco de dados, um arquivo de texto, o registro ou um recurso de aplicativo). Você pode usar o FromSerializedString método para converter essa cadeia de caracteres de volta para um TimeZoneInfo objeto. Para obter detalhes, consulte Como salvar fusos horários em um recurso inserido e Como restaurar fusos horários de um recurso inserido.

Como cada fuso horário é caracterizado por uma diferença base do UTC, bem como por uma diferença do UTC que reflete as regras de ajuste existentes, um horário em um fuso horário pode ser facilmente convertido no horário em outro fuso horário. Para essa finalidade, o TimeZoneInfo objeto inclui vários métodos de conversão, incluindo:

  • ConvertTimeFromUtc, que converte o UTC para o horário em um fuso horário designado.

  • ConvertTimeToUtc, que converte o horário em um fuso horário designado em UTC.

  • ConvertTime, que converte o horário em um fuso horário designado para o horário em outro fuso horário designado.

  • ConvertTimeBySystemTimeZoneId, que usa identificadores de fuso horário (em vez de TimeZoneInfo objetos) como parâmetros para converter o horário em um fuso horário designado para o horário em outro fuso horário designado.

Para obter detalhes sobre converter horários entre fusos horários, consulte Convertendo horários entre fusos horários.

Mostrar: