DetailPage-MSS-KB

Base de Dados de Conhecimento

ID do artigo: 932955 - Última revisão: terça-feira, 15 de janeiro de 2008 - Revisão: 5.2

 

Nesta página

INTRODUÇÃO

Os desenvolvedores que escrevem aplicativos que lidam com datas e horas podem usar um ou mais tecnologias que executam a manipulação de data e manipulação de tempo. Em particular, determinadas APIs do sistema operacional base, o C runtime (CRT) e o Microsoft .NET Framework podem converter ou caso contrário, manipular datas e horas. Este artigo descreve alguns dos conceitos gerais envolvidos na manipulação de datas e horas. Além disso, este artigo descreve o efeito das alterações de horário de verão (DST) 2007 em determinados produtos e tecnologias.

Mais Informações

Tempo de armazenamento e manipulação

Carimbos de data/hora são valores que especificarem uma combinação de data e hora. Aplicativos que devem tratar os carimbos de data/hora normalmente armazenam esses carimbos de data/hora no horário coordenado universal (UTC). A vantagem de UTC é UTC universal. UTC é não sujeitos a fusos horários local ou DST. No entanto, UTC não é amigável nem relevantes para a maioria dos usuários. Embora UTC seja a opção óbvia para o armazenamento, não é uma boa opção para exibição. Portanto, a maioria dos aplicativos converter a hora UTC hora local antes de eles exibir o carimbo de data/hora para o usuário. Por exemplo, Windows Explorer aplicará o fuso horário e a configuração DST para o carimbo de hora UTC antes de exibir datas e horários para arquivos em um diretório de sistema de arquivos Windows NT (NTFS).

A conversão de hora UTC em hora local pode ser pensada como aplicar dois deslocamentos. A primeira é o deslocamento de fuso horário e o segundo é o deslocamento do DST. Portanto, hora local é efetivamente hora UTC mais um deslocamento de fuso horário, além de qualquer DST aplicável deslocamento. O deslocamento de fuso horário é relativamente simples. O computador está configurado para um determinado fuso horário e que fuso horário tem um deslocamento de UTC. Para determinar se um deslocamento de DST deve ser aplicado é muito mais complexo. Essa atividade se baseia em muitas regras que são complexos e dinâmicos.

Essas regras complexas DST alterou recentemente com horário de verão de 2007. A partir de 2007, Estados Unidos adotou novas datas de início e datas de término novo para DST. Além disso, é comum para outros países e governos rotineiramente alterar as datas de início e as datas de término para horário de verão em fusos horários que estão sob seu controle. A seção seguinte descreve os efeitos da alteração DST 2007 em produtos relacionados ao desenvolvedor.

Para obter mais informações sobre o horário de Verão 2007, visite o seguinte site:
http://support.microsoft.com/gp/cp_dst (http://support.microsoft.com/gp/cp_dst)

Efeitos de horário de verão de 2007 sobre tecnologias relacionadas ao desenvolvedor

Windows

No Windows Update e no Microsoft Update, atualizações estão disponíveis que permitem que o Windows para aplicar corretamente as alterações de horário de verão de 2007 e para os anos seguintes. Depois que essas atualizações são aplicadas, o Windows calcula corretamente os deslocamentos atuais da hora UTC para a hora local como o computador passa pelo DST. Os deslocamentos incluem os deslocamentos para as APIs de base e as APIs de rede relacionados a tempo.

Para obter mais informações, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
942763  (http://support.microsoft.com/kb/942763/ ) Atualização de cumulativa de fuso horário de dezembro de 2007 para os sistemas operacionais Microsoft Windows

C runtime (CRT)

A CRT também executa conversões de data e hora conversões. Portanto, a CRT também deve ser atualizada para incluir as novas regras de hora de verão de 2007. A CRT executa seu próprio tempo manipulação somente quando a variável de ambiente TZ está definida ou quando falha uma chamada de tempo de API do sistema operacional subjacente. Atualizações estão disponíveis para os CRTs incluídos com cada versão do Microsoft Visual Studio e também para os CRTs estão incluídos no Windows. Essas atualizações permitem a CRT continuar a lidar corretamente com conversões de hora de verão em fusos horários dos Estados Unidos.

O .NET Framework

O .NET Framework se baseia em chamadas do sistema operacional subjacente. Portanto, o comportamento do .NET Framework reflete o estado do sistema operacional subjacente. Nenhuma atualização separada é necessária.

Ambientes de desenvolvimento (IDEs) integrado ao Visual Studio .NET

O IDEs de .NET Visual Studio inclui versões 2002, 2003 e 2005 de Microsoft Visual C++, Microsoft Visual translation from VPE for Csharp e Microsoft Visual Basic. Esses produtos são afetados apenas porque elas incluem a CRT. Nenhuma atualização IDE específicas é necessária.

O Visual Studio 2005 Team Foundation Server

O Visual Studio 2005 Team Foundation Server depende do sistema operacional subjacente para conversões de data e hora. Portanto, o Visual Studio 2005 Team Foundation Server apresenta o mesmo comportamento que o sistema operacional. O Visual Studio 2005 Team Foundation Server também depende do Microsoft SQL Server, SQL Server Reporting Services e Windows SharePoint Services. Computadores devem ser atualizados com as atualizações relevantes para o sistema operacional, para o SQL Server e para o Windows SharePoint Services. Todas as atualizações relevantes devem ser aplicadas em todos os computadores afetados ao mesmo tempo. Nenhuma atualização Visual Studio 2005 Team Foundation Server separada é necessária.

O Visual Studio 2005 Team System

O Visual Studio 2005 Team System é afetado pelo sistema operacional, por meio do Visual Studio 2005 Team Foundation Server e através do CRT. Não atualização separada do Visual Studio 2005 Team System é necessária.

O Visual SourceSafe

Para obter mais informações sobre problemas do Visual SourceSafe DST em 2007, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
931804  (http://support.microsoft.com/kb/931804/ ) Visual SourceSafe horário de verão problemas em 2007

Tempo de execução do Visual Basic 6.0

O runtime do Visual Basic 6.0 não é afetado.

O Visual C++ 6.0

O Visual C++ 6.0 não é suportada.

Para obter mais informações, visite o seguinte site:
http://support.microsoft.com/lifecycle/ (http://support.microsoft.com/lifecycle/)

Windows Software Development Kit (SDK) para o Windows Vista

Esse SDK inclui uma versão do CRT afectado pelas alterações de horário de verão de 2007. Como parte da instalação desse SDK, você pode instalar o Visual Studio 2005 CRT em computadores que não possuem essa versão do CRT instalado. Se uma versão mais recente do CRT já estiver instalada, a instalação do SDK não substitui a versão mais recente. Quando o SDK é desinstalado, a versão mais recente do CRT é deixada no computador. Ou você pode instalar a atualização do Visual Studio 2005 CRT antes ou depois de instalar o SDK.

O Windows SDK para o Windows Vista também instala um conjunto de módulos de mesclagem (arquivos .msm) para o Visual Studio 2005 CRT para redistribuição do CRT como parte de aplicativos C++ personalizados. Um aplicativo que implanta a CRT redistribuível para a pasta de instalação do aplicativo deve implantar a CRT atualizada da atualização Visual Studio 2005 CRT em vez dos arquivos .msm CRT do Windows SDK para Windows Vista. Um aplicativo que implanta a atualização do Visual Studio 2005 CRT redistribuível para a pasta de instalação do Windows deve aplicar a atualização redistribuível do Visual Studio 2005 CRT para esses computadores.

Platform SDK para o Microsoft Windows Server 2003 R2

Esse SDK inclui uma versão do CRT afectado pelas alterações de horário de verão de 2007. Clientes devem seguir as notas de versão para este SDK e use as atualizações do Visual Studio 2005 CRT se elas forem necessárias.

O .NET Framework 2.0 SDK

Esse SDK inclui uma versão do CRT afectado pelas alterações de horário de verão de 2007. Como parte da instalação desse SDK, você pode instalar o Visual Studio 2005 CRT em computadores que não possuem essa versão do CRT instalado. Se uma versão mais recente do CRT já estiver instalada, a instalação do SDK não substitui a versão mais recente. Quando o SDK é desinstalado, a versão mais recente do CRT é deixada no computador. Ou você pode instalar a atualização do Visual Studio 2005 CRT antes ou depois de instalar o SDK.

Conversão de hora local no Windows

Aplicativos normalmente converter vezes UTC em horários locais antes de exibir informações de tempo e as informações de data para o usuário. O Windows fornece várias APIs para aplicativos para usar para manipulação de carimbo de data/hora.
  • A função GetSystemTime() e a função GetSystemTimeAsFileTime() obter a hora UTC atual em uma estrutura SYSTEMTIME ou em uma estrutura FILETIME.
  • A função GetLocalTime() obtém a hora local atual em uma estrutura SYSTEMTIME.
  • A função GetTimeZoneInformation() obtém uma estrutura TIME_ZONE_INFORMATION que descreve a configuração de horário de verão para o computador e o fuso horário atual.
  • A função SystemTimeToFileTime() e a função FileTimeToSystemTime() empacotar entre SYSTEMTIME estruturas e FILETIME estruturas.
  • A função FileTimeToLocalFileTime() e a função LocalFileTimeToFileTime() converter e convertem uma estrutura FILETIME entre o UTC e a hora local usando o fuso horário atual e a configuração DST no computador.
  • A função SystemTimeToTzSpecificLocalTime() e a função TzSpecificTimeToSystemTime() convertem um carimbo de hora UTC em uma estrutura SYSTEMTIME em uma estrutura SYSTEMTIME local. Essas funções usam uma estrutura TIME_ZONE_INFORMATION que especifica a data de início e a data de término para o DST. Por padrão, as regras de hora de verão atuais são usadas quando nenhum como estrutura é fornecida.
  • A função NetRemoteTOD() obtém a hora de um servidor remoto usando ’s servidor informações e configurações.
Observação A função FileTimeToLocalFileTime() e a função LocalFileTimeToFileTime() realizar a conversão entre o UTC e a hora local usando apenas as informações de fuso horário atuais e as informações de DST. Esta conversão ocorre independentemente do carimbo de hora que está sendo convertido.

Para ver um exemplo desse comportamento no Windows Explorer, siga estas etapas em um computador que reside em um fuso horário que usa o DST.

Esteja ciente de que essas etapas exigem que você alterar o relógio do sistema. Portanto, você deve sair qualquer aplicativos, como aplicativos de calendário, que podem reagir a essas alterações de tempo antes de executar essas etapas.
  1. Altere a data no computador para um dia de DST. Por exemplo, defina a data para 1 º de julho de 2006.
  2. Em um diretório NTFS no mesmo computador, crie um novo arquivo de texto chamado Test.txt.
  3. Observe que o carimbo de hora no arquivo é exibido da seguinte maneira no Windows Explorer:
    1/7/2006 3 h 37
  4. Altere a data no computador para um dia não DST. Por exemplo, defina a data para 1 de fevereiro de 2007.
  5. Atualize a janela do Windows Explorer.
  6. Observe que o carimbo de hora no arquivo é exibido da seguinte maneira no Windows Explorer:
    1/7/2006 2 h 37
Neste exemplo anterior, não altera o carimbo de hora UTC no arquivo. No entanto, as regras que são usadas para converter o carimbo de data/hora em um horário local alterar dependendo a data atual no computador. Na etapa 3, um deslocamento de DST foi aplicado porque 1 º de julho está dentro do intervalo de DST. Na etapa 6, deslocamento não DST foi aplicado, porque 1 de fevereiro não se enquadra dentro do intervalo de DST. Esse comportamento ocorre para que o carimbo de hora arquivo pode ser convertido deterministicamente para hora local e de hora local.

Para obter mais informações, consulte este blog:
http://blogs.msdn.com/oldnewthing/archive/2003/10/24/55413.aspx (http://blogs.msdn.com/oldnewthing/archive/2003/10/24/55413.aspx)
O método SystemTimeToTzSpecificLocalTime() e o método TzSpecificTimeToSystemTime() converter entre o UTC e a hora local usando a estrutura TIME_ZONE_INFORMATION fornecida. Não se for fornecida nenhuma informação de fuso horário, essas funções usam regras de fuso horário atual e as regras de hora de verão para determinar se um deslocamento de DST devem ser aplicadas para o carimbo de data/hora. Isso equivale funcionalmente à chamando o método GetTimeZoneInformation() para obter a estrutura TIME_ZONE_INFORMATION que está atualmente em vigor.

A estrutura TIME_ZONE_INFORMATION inclui a data de início e a data de parada para o DST. Portanto, quando a estrutura TIME_ZONE_INFORMATION usa as informações de fuso horário atuais, estrutura TIME_ZONE_INFORMATION pode introduzir um imprecisão histórico. Esse comportamento pode ocorrer se as informações de fuso horário atual e as informações de DST não refletem o carimbo de hora que está sendo convertido. Esse comportamento é afetado pelo DST 2007 apenas porque as regras que regem as datas quando o DST inicia e pára foram alteradas.

Para obter conversões historicamente precisas dessas funções, um aplicativo deve fornecer uma estrutura TIME_ZONE_INFORMATION historicamente precisa quando o aplicativo chama essas funções.

Fusos horários dinâmicos no Windows

O Windows Vista apresenta fusos horários dinâmicos DST. DST dinâmico oferece suporte a fusos horários cujos limites para o DST alterar de um ano para o outro. Essas regras são armazenadas no registro. Aplicativos podem consultar as regras usando a função GetDynamicTimeZoneInformation() .

Fusos horários dinâmicos ativar a atualização mais fácil de computadores, especialmente para localidades onde os limites de horário de verão anuais são conhecidos previamente. Para obter mais informações sobre a estrutura DYNAMIC_TIME_ZONE_INFORMATION no SDK do Windows para o Vista, visite o seguinte site da Web Microsoft Developer Network (MSDN):
http://msdn2.microsoft.com/en-us/library/ms724253.aspx (http://msdn2.microsoft.com/en-us/library/ms724253.aspx)

Conversão de hora local no C runtime (CRT)

A CRT basicamente possui três modos nos quais ele pode traduzir carimbos de data/hora:
  • Se a variável de ambiente TZ não estiver definida, a CRT chama as APIs do Windows e exibe o comportamento do Windows conforme descrito neste artigo.
  • Se a variável de ambiente TZ for definida, a CRT executa suas própria conversões baseiam-se essa configuração. A CRT está sendo atualizada para que ele respeita novas regras de hora de Verão 2007 quando ele executa conversões neste cenário.
  • Se a variável de ambiente TZ não é definida, mas as APIs do Windows subjacente falhar, a CRT volta ao seus próprio conversões usando um valor de PST8PDT para a variável de ambiente TZ.
A CRT contém sua própria lógica para converter UTC em hora local. Aplicativos podem obter carimbos de data/hora UTC das funções, como a função time() . Esses carimbos de hora UTC são armazenados em valores time_t . Conversão para a hora local pode ser executada com uma função, como a função localtime_s() . A função localtime_s() preenche uma estrutura de tm definida no arquivo de cabeçalho Time.h. A estrutura de tm tem como base o fuso horário que é definido na variável de ambiente TZ e as regras de hora de verão que estão em vigor no momento do carimbo de data/hora.

Observação Essa conversão segue regras específicas para os Estados Unidos.

Antes de aplicar a atualização de horário de verão de 2007, a CRT corretamente lida com carimbos de hora atuais em fusos horários dos Estados Unidos. Depois de aplicar a atualização de horário de verão de 2007, a CRT também manipula passadas e futuras datas Estados Unidos. Atualizações para a CRT são listadas na seção “ referências ”.

Conversão de hora local no .NET Framework

O .NET Framework contém classes que armazenam e converter os carimbos de data/hora. Essas classes incluem a classe DateTime , a classe de fuso horário , a classe TimeSpan e a classe de DateTimeKind . Como observado anteriormente, essas classes dependem principalmente a implementação de plataforma subjacente. Essas classes exibem o mesmo comportamento que o sistema operacional subjacente APIs.

Um comportamento interessante apresentado pelas classes do .NET Framework Data e classes de tempo se relaciona com as funções que o carimbo de data/hora de compensada por uma quantidade solicitada. Por exemplo, considere a função AddHours() , a função AddMinutes() e a função AddSeconds() na classe DateTime . Essas funções e nomeado da mesma forma, simplesmente incrementar o carimbo de data/hora pela quantidade solicitada sem levar em consideração as configurações de hora de verão. Esse comportamento pode ser considerado aritmética simples no carimbo de hora UTC subjacente. No entanto, esse comportamento pode levar a resultados inesperados quando a adição faz com que o carimbo de hora passar em ou fora do horário de verão. Esse comportamento é não relacionado a alterações de horário de verão de 2007.

Recomendações

As recomendações a seguir podem ajudar os desenvolvedores minimizar o efeito de horário de verão de 2007 e melhorar Data geral e tratamento de tempo.
  • Você deve planejar uma instalação próxima atômica das atualizações de horário de verão de 2007. Todas as atualizações DST 2007 planejadas devem ser aplicadas como close em tempo uns aos outros possível. Se um computador que tenha sido atualizado tenta usar métodos, como consultas SQL ou serviços da Web para se comunicar com um computador que não tenha sido atualizado, podem ocorrer erros de tradução. Da mesma forma, se um único computador requer dois ou mais atualizações, como a atualização do Windows e a atualização CRT, as atualizações devem ser aplicadas ao mesmo tempo.
  • Carimbos de data/hora UTC são historicamente precisos. Geralmente é a conversão em hora local que diz respeito à maioria dos aplicativos. Aplicativos devem sempre armazenar carimbos de data/hora UTC. Conversões para a hora local para fins de exibição exigem informações de fuso horário e informações de DST. Essas informações podem vir de várias fontes:
    • O aplicativo pode usar o fuso horário atual e a configuração de horário de verão para a conversão. Isso pode introduzir um imprecisão na conversão se o fuso horário atual e a configuração DST não estavam em vigor no momento do carimbo de data/hora.
    • O aplicativo pode armazenar as informações de fuso horário anteriormente precisas e informações de horário de verão, além do carimbo de hora UTC.
    • Quando fusos horários dinâmicos estão disponíveis, o aplicativo pode usar fusos horários dinâmicos para determinar quais informações de fuso horário devem ser aplicadas a um determinado carimbo de hora UTC. Esta opção está disponível somente quando as informações de fuso horário dinâmico estão disponíveis para um carimbo de hora específico e para um fuso horário específico.
    • O aplicativo pode armazenar um carimbo de hora local e o carimbo de hora UTC. Esse método impede que a necessidade de conversão futura.
  • Qualquer comunicação entre computadores que lidam com carimbos de data/hora deve usar carimbos de data/hora UTC. Isso proporciona implicitamente a ambos os computadores as mesmas informações de contexto para UTC.
  • Se um aplicativo lida com datas, você deve ser cuidado com a maneira como as datas são manipuladas no teste. As datas que são exibidas sem informações de hora normalmente são armazenadas como um carimbo de hora de 12: 00 na data relevante. Portanto, um erro de logoff por um na parte do carimbo de data/hora hora pode resultar em um resultado de logoff por um data efetiva de se o tempo é deslocado às 11: 00 do dia anterior.

Referências

Para obter mais informações sobre o portal de horário de Verão 2007 Microsoft, visite o seguinte site: http://support.microsoft.com/gp/cp_dst (http://support.microsoft.com/gp/cp_dst) Para obter mais informações, clique nos números abaixo para ler os artigos na Base de dados de Conhecimento da Microsoft:
942763  (http://support.microsoft.com/kb/942763/ ) Atualização de cumulativa de fuso horário de dezembro de 2007 para os sistemas operacionais Microsoft Windows
931975  (http://support.microsoft.com/kb/931975/ ) Como preparar o SQL Server 2005 e o SQL Server 2000 para que as alterações para o horário de verão de 2007
931804  (http://support.microsoft.com/kb/931804/ ) Visual SourceSafe horário de verão problemas em 2007
Para obter mais informações, visite os seguintes sites da Microsoft Developer Network (MSDN):
http://msdn2.microsoft.com/en-us/library/ms724277.aspx (http://msdn2.microsoft.com/en-us/library/ms724277.aspx)

http://msdn2.microsoft.com/en-us/library/ms724490.aspx (http://msdn2.microsoft.com/en-us/library/ms724490.aspx)

http://msdn2.microsoft.com/en-us/library/ms725473.aspx (http://msdn2.microsoft.com/en-us/library/ms725473.aspx)
Para obter atualizações de horário de verão de 2007 para o C runtime (CRT), clique nos números abaixo para ler os artigos na Base de dados de Conhecimento da Microsoft:
932305  (http://support.microsoft.com/kb/932305/ ) CORRECÇÃO: Visual C++ .NET 2002 C runtime horário de Verão 2007 atualização para o problema de variável de ambiente TZ
932304  (http://support.microsoft.com/kb/932304/ ) CORRECÇÃO: Visual C++ .NET 2002 Service Pack 1 C runtime horário de Verão 2007 atualização para o problema de variável de ambiente TZ
932299  (http://support.microsoft.com/kb/932299/ ) CORRECÇÃO: Visual C++ .NET 2003 C runtime horário de Verão 2007 atualização para o problema de variável de ambiente TZ
932298  (http://support.microsoft.com/kb/932298/ ) CORRECÇÃO: Visual C++ .NET 2003 Service Pack 1 C runtime horário de Verão 2007 atualização para o problema de variável de ambiente TZ
932392  (http://support.microsoft.com/kb/932392/ ) CORRECÇÃO: Visual C++ .NET 2005 C runtime horário de Verão 2007 atualização para a variável de ambiente TZ
932391  (http://support.microsoft.com/kb/932391/ ) CORRECÇÃO: Visual C++ .NET 2005 Service Pack 1 C runtime horário de Verão 2007 atualização para a variável de ambiente TZ
932590  (http://support.microsoft.com/kb/932590/ ) CORRECÇÃO: Aplicativos baseados no Windows que usam a variável de ambiente TZ podem não funcionar conforme o esperado devido às alterações à hora de verão

A informação contida neste artigo aplica-se a:
  • The C Run-Time (CRT)
  • Microsoft Visual Studio 2005 Service Pack 1
  • Microsoft Visual Studio 2005 Team Foundation Server
  • Microsoft Visual Studio 2005 Standard Edition
  • Microsoft Visual Studio 2005 Professional Edition
  • Microsoft Visual Studio .NET 2003 Service Pack 1
  • Microsoft Visual Studio .NET 2003 Professional Edition
  • Microsoft Visual Studio .NET 2003 Enterprise Architect
  • Microsoft Visual Studio .NET 2003 Enterprise Developer
  • Microsoft Visual Studio .NET 2003 Academic Edition
  • Microsoft Visual Studio .NET 2002 Professional Edition
  • Microsoft Visual Studio .NET 2002 Enterprise Developer
  • Microsoft Visual Studio .NET 2002 Enterprise Architect
  • Microsoft Visual Studio .NET 2002 Academic Edition
Palavras-chave: 
kbmt kbinfo kbhowto KB932955 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 932955  (http://support.microsoft.com/kb/932955/en-us/ )
Compartilhar
Opções de suporte adicionais
Fóruns de Suporte do Microsoft Community
Contate-nos diretamente
Localize um parceiro certificado da Microsoft
Microsoft Store