Como processar datas e horas que incluem a hora de Verão

Traduções de Artigos Traduções de Artigos
Artigo: 932955 - Ver produtos para os quais este artigo se aplica.
Expandir tudo | Reduzir tudo

Nesta página

INTRODUÇÃO

Os programadores que escrevem aplicações que processam as datas e horas podem utilizar um ou mais tecnologias que efectuam a manipulação de data e hora manipulação. Em particular, algumas APIs do sistema operativo base, o tempo de execução C (CRT) e o Microsoft .NET Framework podem converter ou caso contrário, manipular datas e horas. Este artigo descreve alguns dos conceitos gerais envolvidos em processamento de datas e horas. Além disso, este artigo descreve o efeito das alterações de 2007 hora de Verão (DST) em determinados produtos e tecnologias.

Mais Informação

Armazenamento de tempo e manipulação

Os carimbos de data/hora são valores que especificarem uma combinação de data e hora. As aplicações que devem processar os carimbos de data/hora, normalmente, armazenam esses carimbos de data/hora no tempo universal coordenado (UTC). A vantagem de UTC é UTC universal. UTC é não sujeito fuso horário local ou à hora de Verão. No entanto, UTC é relevante para a maioria dos utilizadores nem amigável. Embora UTC seja a opção óbvia para armazenamento, não é uma boa escolha para visualização. Por conseguinte, a maior parte das aplicações converter a hora UTC para a hora local antes que apresentar a hora para o utilizador. Por exemplo, O Explorador do Windows aplica o fuso horário e a definição de hora de Verão para a hora UTC antes de apresentar datas e horas para ficheiros no directório de sistema de ficheiros do Windows NT (NTFS).

Conversão de hora UTC para a hora local pode ser considerado como aplicar dois desvios. O primeiro é o desvio de fuso horário e o segundo é o desvio da hora de Verão. Por este motivo, hora local é efectivamente hora UTC e um desvio de fuso horário e desvio qualquer hora de Verão aplicável. O desvio de fuso horário é bastante claro. O computador está configurado para um determinado fuso horário e esse fuso horário tem um deslocamento do UTC. Para determinar se deve ser aplicado um desfasamento da hora de Verão é muito mais complexo. Esta actividade depende muitas regras complexas e dinâmico.

As regras da hora de Verão complexas alterou recentemente com hora de Verão de 2007. Iniciar no 2007, Estados Unidos adoptou novas datas de início e datas de fim nova para a hora de Verão. Além disso, é comum para outros países e governos para alterar regularmente as datas de início e as datas de fim para a hora de Verão em fusos horários que estão sob seu controlo. A secção seguinte descreve os efeitos da alteração da hora de Verão de 2007 nos produtos relacionadas com programadores.

Para mais informações sobre a hora de Verão de 2007, visite o seguinte Web site da Microsoft:
http://support.microsoft.com/gp/cp_dst

Efeitos da hora de Verão de 2007 em tecnologias relacionadas com programadores

Windows

Estão disponíveis no Windows Update e no Microsoft Update, actualizações que activar o Windows aplicar correctamente as alterações da hora de Verão de 2007 e anos seguintes. Depois destas actualizações são aplicadas, o Windows calcula correctamente os deslocamentos actuais da hora UTC para a hora local como o computador passa a hora de Verão. Os deslocamentos incluem os deslocamentos para as APIs base e para as APIs relacionadas com o tempo de rede.

Para obter mais informações, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
942763Actualização cumulativa de fusos horários Dezembro de 2007 para sistemas operativos Microsoft Windows

Tempo de execução c (CRT)

O CRT também executa traduções de data e hora traduções. Por conseguinte, o CRT tem também de ser actualizado para incluir as novas regras da hora de Verão de 2007. O CRT efectua respectivo tratamento de tempo apenas quando a variável de ambiente TZ está definida ou quando falha uma chamada de tempo de API do sistema operativo subjacente. As actualizações estão disponíveis para os CRTs incluídas em cada versão do Microsoft Visual Studio e também para CRTs incluídas no Windows. Estas actualizações permitem CRT continuar a processar correctamente as conversões da hora de Verão em fusos horários dos Estados Unidos.

O .NET Framework

O .NET Framework depende de chamadas de sistema operativo subjacente. Por conseguinte, o comportamento do .NET Framework reflecte o estado do sistema operativo subjacente. Não é necessária nenhum actualização em separado.

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

O IDEs de .NET Visual Studio incluem versões 2002, 2003 e 2005 do Microsoft Visual C++, Microsoft Visual C# e Microsoft Visual Basic. Estes produtos são afectados porque incluem o CRT. É necessária actualização não específicas do IDE.

O Visual Studio 2005 Team Foundation Server

O Visual Studio 2005 Team Foundation Server depende do sistema operativo subjacente para conversões de data e hora. Por conseguinte, Visual Studio 2005 Team Foundation Server revela o mesmo comportamento que o sistema operativo. O Visual Studio 2005 Team Foundation Server depende também do Microsoft SQL Server, SQL Server Reporting Services e Windows SharePoint Services. Devem ser aplicadas em computadores com as actualizações relevantes para o sistema operativo, para o SQL Server e para o Windows SharePoint Services. Todas as actualizações relevantes devem ser aplicadas em todos os computadores afectados ao mesmo tempo. Sem actualização separada do Visual Studio 2005 Team Foundation Server é necessária.

Visual Studio 2005 Team System

Visual Studio 2005 Team System é afectado através do sistema operativo, através do Visual Studio 2005 Team Foundation Server e através de CRT. Sem actualização separada do Visual Studio 2005 Team System é necessária.

Visual SourceSafe

Para obter mais informações sobre problemas de hora de Verão Visual SourceSafe no 2007, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
931804Visual SourceSafe hora de Verão problemas no 2007

Runtime do Visual Basic 6.0

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

Visual C++ 6.0

Visual C++ 6.0 já não é suportado.

Para mais informações, visite o seguinte Web site da Microsoft:
http://support.microsoft.com/lifecycle/

Windows Software Development Kit (SDK) para o Windows Vista

Este SDK inclui uma versão de CRT afectado pelas alterações da hora de Verão de 2007. Como parte da instalação deste SDK, pode instalar o Visual CRT de 2005 Studio em computadores que ainda não tem essa versão do CRT instalado. Se tiver uma versão mais recente do CRT instalada, a instalação do SDK não substitui esse versão mais recente. Quando o SDK é desinstalado, a versão mais recente do CRT é deixada no computador. Ou é possível instalar a actualização do Visual Studio 2005 CRT antes ou depois de instalar o SDK.

O Windows SDK para Windows Vista também instala um conjunto de módulos de intercalação (ficheiros .msm) para o Visual CRT de 2005 Studio para redistribuição de CRT como parte das aplicações C++ personalizadas. Uma aplicação que implementa CRT redistribuível para a pasta instalação da aplicação tem de implementar CRT actualizada da actualização de Visual Studio 2005 CRT em vez dos ficheiros .msm CRT do SDK do Windows ' para o Windows Vista. Uma aplicação que implementa a actualização do Visual Studio 2005 CRT redistribuível para a pasta de instalação do Windows tem de liquidar a actualização redistribuível do Visual Studio 2005 CRT nesses computadores.

Platform SDK para o Microsoft Windows Server 2003 R2

Este SDK inclui uma versão de CRT afectado pelas alterações da hora de Verão de 2007. Os clientes têm siga as notas de lançamento para este SDK e utilize as actualizações do Visual Studio 2005 CRT se forem necessários.

O .NET Framework 2.0 SDK

Este SDK inclui uma versão de CRT afectado pelas alterações da hora de Verão de 2007. Como parte da instalação deste SDK, pode instalar o Visual CRT de 2005 Studio em computadores que ainda não tem essa versão do CRT instalado. Se tiver uma versão mais recente do CRT instalada, a instalação do SDK não substitui esse versão mais recente. Quando o SDK é desinstalado, a versão mais recente do CRT é deixada no computador. Ou é possível instalar a actualização do Visual Studio 2005 CRT antes ou depois de instalar o SDK.

Conversão de hora local no Windows

Aplicações converter normalmente horas UTC horas locais antes que apresenta informações de hora e data informações ao utilizador. O Windows fornece várias API para aplicações a utilizar para manipulação de carimbo de data/hora.
  • A função GetSystemTime() e a função GetSystemTimeAsFileTime() obtêm a hora UTC actual numa estrutura SYSTEMTIME ou numa estrutura FILETIME.
  • A função GetLocalTime() obtém a hora local actual numa estrutura SYSTEMTIME.
  • A função GetTimeZoneInformation() obtém uma estrutura TIME_ZONE_INFORMATION que descreve o fuso horário actual e a definição de hora de Verão para o computador.
  • A função SystemTimeToFileTime() e a função FileTimeToSystemTime() organizar entre SYSTEMTIME estruturas e FILETIME estruturas.
  • A função FileTimeToLocalFileTime() a função LocalFileTimeToFileTime() converter e converter uma estrutura FILETIME entre a UTC e a hora local utilizando o fuso horário actual e a definição de hora de Verão no computador.
  • A função SystemTimeToTzSpecificLocalTime() e a função TzSpecificTimeToSystemTime() convertem uma hora UTC numa estrutura SYSTEMTIME uma estrutura SYSTEMTIME local. Estas funções utilizam uma estrutura TIME_ZONE_INFORMATION que especifica a data de início e a data de fim para a hora de Verão. Por predefinição, as regras da hora de Verão actuais são utilizadas quando essa estrutura não é fornecida.
  • A função NetRemoteTOD() obtém o tempo de um servidor remoto utilizando ?s servidor informações e definições.
Nota A função FileTimeToLocalFileTime() e a função LocalFileTimeToFileTime() efectuam a conversão entre a hora UTC e a hora local utilizando apenas as informações de fuso horário actual e as informações relativas à hora de Verão. Esta conversão ocorre independentemente de hora que está a ser convertida.

Para ver um exemplo deste comportamento no Explorador do Windows, siga estes passos num computador que reside num fuso horário com hora de Verão.

Tenha em atenção que estes passos requerem que altere o relógio do sistema. Por conseguinte, tem de sair quaisquer aplicações, tais como aplicações de calendário, que podem reagir estas alterações de tempo antes de seguir estes passos.
  1. Altere a data no computador para um dia da hora de Verão. Por exemplo, defina a data 1 de Julho de 2006.
  2. Num directório NTFS no mesmo computador, crie um novo ficheiro de texto denominado Test.txt.
  3. Repare que as marca de hora no ficheiro é apresentada de maneira no Explorador do Windows:
    7/1/2006 3: 37 pm
  4. Altere a data no computador para um dia não hora de Verão. Por exemplo, defina a data a 1 de Fevereiro de 2007.
  5. Actualize a janela do Explorador do Windows.
  6. Repare que as marca de hora no ficheiro é apresentada de maneira no Explorador do Windows:
    7/1/2006 2: 37 pm
Neste exemplo anterior, não é alterada a marca de hora UTC no ficheiro. No entanto, as regras que são utilizadas para converter a hora para uma hora local alterar consoante a data actual no computador. No passo 3, um desvio de hora de Verão foi aplicado uma vez que ficar 1 de Julho dentro do intervalo da hora de Verão. No passo 6, não desfasamento da hora de Verão foi aplicado, porque 1 de Fevereiro não incide no relativas à hora de Verão intervalo. Isto acontece para que a hora do ficheiro pode ser convertida deterministically para hora local e de hora local.

Para mais informações, consulte este blogue:
http://blogs.msdn.com/oldnewthing/archive/2003/10/24/55413.aspx
O método SystemTimeToTzSpecificLocalTime() e o método TzSpecificTimeToSystemTime() converter entre hora UTC e a hora local através da estrutura TIME_ZONE_INFORMATION fornecida. Se for fornecidas não informações de fuso horário, estas funções utilizam as regras de fuso horário actuais e devem ser aplicadas as regras da hora de Verão para determinar se um desfasamento da hora de Verão para a hora. É funcionalmente equivalente para chamar o método GetTimeZoneInformation() obter da estrutura TIME_ZONE_INFORMATION que se encontra actualmente em vigor.

Da estrutura TIME_ZONE_INFORMATION inclui a data de início e a data de paragem para a hora de Verão. Por conseguinte, quando da estrutura TIME_ZONE_INFORMATION utiliza as informações de fuso horário actuais, da estrutura TIME_ZONE_INFORMATION pode trazer um inaccuracy histórico. Este comportamento pode ocorrer se as informações de fuso horário actual e as informações relativas à hora de Verão não reflectem a hora está a ser convertida. Este comportamento é afectado por hora de Verão de 2007, porque as regras que regem as datas quando a hora de Verão começa e pára foram alteradas.

Para obter Historicamente precisas conversões destas funções, uma aplicação tem de fornecer uma estrutura TIME_ZONE_INFORMATION Historicamente correctas quando a aplicação chamar estas funções.

Fusos horários dinâmicos no Windows

Windows Vista introduz dinâmicos da hora de Verão fusos horários. Hora de Verão dinâmica fornece suporte para fusos horários cujos limites para a hora de Verão alterar de ano para ano. Estas regras são armazenadas no registo. As aplicações podem consultar as regras utilizando a função GetDynamicTimeZoneInformation() .

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

Conversão de hora local em que o tempo de execução C (CRT)

O CRT basicamente tem três modos na qual é possível converter a carimbos de data/hora:
  • Se a variável de ambiente TZ não estiver definida, o CRT chama a API do Windows e exibe o comportamento do Windows conforme descrito neste artigo.
  • Se a variável de ambiente TZ estiver definida, o CRT efectua as suas próprias conversões baseiam-se essa definição. O CRT a ser actualizada para que respeita as novas regras da hora de Verão de 2007, quando efectua conversões neste cenário.
  • Se a variável de ambiente TZ não está definida, mas APIs de subjacente do Windows falhar, o CRT reverte para as suas próprias conversões utilizando um valor de PST8PDT para a variável de ambiente TZ.
O CRT contém a suas próprias lógica para converter a hora UTC para a hora local. As aplicações podem ser obtidos carimbos de data/hora UTC funções tais como a função time() . Estes selos de tempo de UTC são armazenados em time_t valores. Conversão para a hora local pode ser executada com uma função como, por exemplo, a função localtime_s() . A função localtime_s() preenche uma estrutura de tm definido no ficheiro de cabeçalho Time.h. A estrutura tm baseia-se o fuso horário definido na variável de ambiente TZ e as regras de hora de Verão que estão em vigor na altura da marca de hora.

Nota Esta conversão segue regras específicas para os Estados Unidos.

Antes de aplicar a actualização da hora de Verão de 2007, o CRT processa correctamente selos de tempo actuais em fusos horários dos Estados Unidos. Depois de aplicar a actualização da hora de Verão de 2007, o CRT também trata da passado e futuras datas dos Estados Unidos. Actualizações para o CRT estão listadas na secção ? referências ?.

Conversão de hora local no .NET Framework

O .NET Framework contém classes que armazenam e converter carimbos de data/hora. Estas classes incluem a classe DateTime , a classe de fuso horário , a classe TimeSpan e a classe DateTimeKind . Como anteriormente anotados, estas classes dependem principalmente a implementação de plataforma subjacente. Estas classes de apresentar o mesmo comportamento que o sistema operativo subjacente APIs.

Um comportamento interessante registou pela classes do .NET Framework Data e hora classes relacionado com as funções que a marca de hora por um período pedido. Por exemplo, considere a função AddHours() , a função AddMinutes() e a função AddSeconds() a classe DateTime . Estas funções e com o nome do mesmo modo, incrementar apenas a hora a quantidade pedida independentemente para definições de hora de Verão. Este comportamento poderá ser considerado aritmética simples sobre a hora UTC subjacente. No entanto, este comportamento poderia conduzir a resultados inesperados quando a adição faz com que a marca de hora passar para ou fora de hora de Verão. Este comportamento é não relacionado para alterações da hora de Verão de 2007.

Recomendações

As seguintes recomendações podem ajudar os programadores minimizar os efeitos de hora de Verão de 2007 e melhorar geral data e hora processamento.
  • Deverá planear para uma instalação perto atómico das actualizações da hora de Verão de 2007. Todas as actualizações da hora de Verão de 2007 planeadas devem ser aplicadas como fechar em tempo uns aos outros possível. Se um computador que tenha sido actualizado tenta utilizar métodos tais como consultas SQL ou serviços Web para comunicar com um computador que não tenha sido actualizado, poderão ocorrer erros de conversão. Do mesmo modo, se um único computador requer duas ou mais actualizações, tais como a actualização do Windows e a actualização de CRT, as actualizações devem ser aplicadas ao mesmo tempo.
  • Carimbos de data/hora UTC estão Historicamente correctas. Normalmente, recomenda-se a conversão para a hora local que diz respeito a maioria das aplicações. Aplicações sempre devem armazenar carimbos de data/hora UTC. Conversão para a hora local para efeitos de visualização requerem informações de fuso horário e informações relativas à hora de Verão. Estas informações podem ser provenientes várias origens:
    • A aplicação pode utilizar o fuso horário actual e a definição de hora de Verão para a conversão. Isto pode introduzir um inaccuracy na conversão se o fuso horário actual e a definição de hora de Verão não estavam em vigor na altura da marca de hora.
    • A aplicação poderá armazenar as informações de fuso horário anteriormente precisas e informações relativas à hora de Verão em adição a hora UTC.
    • Quando fusos horários dinâmicos estão disponíveis, a aplicação poderá utilizar fusos horários dinâmicos para determinar que informações de fuso horário devem ser aplicadas a uma determinado hora UTC. Esta opção só está disponível quando as informações de fuso horário dinâmicos estão disponíveis para uma hora específica e para um fuso horário específico.
    • A aplicação poderá armazenar uma hora local e a hora UTC. Este método impede a necessidade de conversão futura.
  • Qualquer comunicação entre computadores que tratam de carimbos de data/hora deve utilizar carimbos de data/hora UTC. Isto permite implicitamente-ambos os computadores as mesmas informações de contexto para UTC.
  • Se uma aplicação trata as datas, deverá ser cuidado com o forma como as datas são processadas nos testes. As datas que são apresentadas sem informações de hora normalmente são armazenadas como uma marca de hora de 12: 00, a data pretendida. Por conseguinte, um erro ao desactivar a um a parte de hora a hora poderia resultar num resultado de desactivar a um na data efectiva se posteriormente o será alterado para 11: 00 do dia anterior.

Referências

Para obter mais informações sobre o portal de hora de Verão de 2007 Microsoft, visite o seguinte Web site da Microsoft: http://support.microsoft.com/gp/cp_dstPara obter mais informações, clique números de artigo que se seguem para visualizar os artigos na base de dados de conhecimento da Microsoft:
942763Actualização cumulativa de fusos horários Dezembro de 2007 para sistemas operativos Microsoft Windows
931975Como preparar o SQL Server 2005 e SQL Server 2000 para as alterações à hora de Verão de 2007
931804Visual SourceSafe hora de Verão problemas no 2007
Para mais informações, visite os seguintes Web sites da Microsoft Developer Network (MSDN):
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/ms725473.aspx
Para obter actualizações de hora de Verão de 2007 para o tempo de execução C (CRT), clique números de artigo que se seguem para visualizar os artigos na base de dados de conhecimento da Microsoft:
932305CORRECÇÃO: C 2002 do Visual C++ .NET runtime hora de Verão de 2007 actualização para o problema de variável de ambiente TZ
932304CORRECÇÃO: Visual C++ .NET 2002 Service Pack 1C runtime hora de Verão de 2007 actualização para o problema de variável de ambiente TZ
932299CORRECÇÃO: Visual C++ .NET 2003 C runtime hora de Verão de 2007 actualização para o problema de variável de ambiente TZ
932298CORRECÇÃO: Visual C++ .NET 2003 Service Pack 1C runtime hora de Verão de 2007 actualização para o problema de variável de ambiente TZ
932392CORRECÇÃO: C 2005 do Visual C++ .NET runtime hora de Verão de 2007 actualização para a variável de ambiente TZ
932391CORRECÇÃO: Visual C++ .NET 2005 Service Pack 1C runtime hora de Verão de 2007 actualização para a variável de ambiente TZ
932590CORRECÇÃO: Aplicações baseadas no Windows que utilizam a variável de ambiente TZ não podem funcionar como previsto devido a alterações à hora de Verão

Propriedades

Artigo: 932955 - Última revisão: 15 de janeiro de 2008 - Revisão: 5.2
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 Team System Team Foundation:
  • Microsoft Visual Studio 2005 Standard Edition
  • Microsoft Visual Studio 2005 Professional
  • Microsoft Visual Studio 2005 Express 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 Architect Edition SP1
  • 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á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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 932955

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com