Dica do Mês – Novidades – SQL Server 2016 – AT Time Zone

Mas que beleza, boa tarde, comunidade.

Após 17 dias acompanhando os 31º Jogos Olímpicos realizados em nosso Brasil, estou voltando a realidade, como sempre um grande emoção em poder conhecer um pouco da diversidade de esportes, culturas, atletas e principalmente dos mais variados países existentes neste mundão de Deus.

Foi justamente inspirado neste momento olímpico que pensei em compartilhar algo relacionado ao SQL Server mas que também esteja envolvido com os jogos, posso dizer que não foi fácil encontrar algo de bate pronto, mas pesquisando aqui, buscando ali acabei encontrando uma pequena novidade bem escondida implementada no Microsoft SQL Server 2016.

Estou me referindo a instrução AT TIME Zone ou melhor dizendo a Fuso Horário algo que tem tudo a ver com olimpíadas e esportes, ainda mais por neste período todos os países do mundo estavam direcionando seus olhares “satélites” na incansável missão de transmitir em tempo real tudo o que estava acontecendo. Imagine você na Austrália no última dia 21 de Agosto, louco para querer saber qual seria o horário de transmissão do Jogo da Seleção Brasileira de Vôlei, se fosse eu estava realmente aflito.

Muito bem, pensando neste e outros possíveis cenários que eu dedico o post de hoje. Seja bem vindo a mais uma dica do mês, começa aqui a Dica do Mês – Novidades – SQL Server 2016 – AT Time Zone.


Um pouco de história…..

Viver em um mundo tão dinâmico, diversificado, que apresenta a cada dia novas tecnologias, culturas e comportamento é algo bastante complexo e complicado, ainda mais quando no deparamos com compromissos realizados fora da nossa região, país ou continente. E para nos ajudar a tentar se organizar em nossa agenda de compromissos que foram criadas as zonas horárias ou fusos horários para cada uma das vinte e quatro áreas em que se divide a Terra e que seguem a mesma definição de tempo.

O termo fuso denomina a porção de superfície esférica compreendida entre dois semiplanos que partem de um diâmetro da esfera, assemelhando-se à superfície externa de um gomo de laranja. Anteriormente, por volta do ano 1300, ou já antes, usava-se o tempo solar aparente, passagem meridiana do Sol, de forma que a hora do meio-dia se diferenciava de uma cidade para outra.

Os fusos horários corrigiram em parte o problema ao colocar os relógios de cada região no mesmo tempo solar médio.

Principais siglas

Sigla Significado Tradução Descrição
GMT Greenwich Mean Time Tempo Médio de Greenwich Refere-se a Greenwich, onde ficou definido por convenção, a base para cálculo internacional de horário.
ST Standard Time Tempo Padrão Hora oficial em cada fuso horário.
DST Daylight Saving Time ou Summer Time Horário de verão Alteração do horário de uma região, designado apenas durante uma porção do ano, adiantando-se em geral uma hora no fuso horário oficial local.
UTC Coordinated Universal Time Tempo Universal Coordenado, tempo civil Os fusos horários são relativos a ele.
UT Universal Time Tempo Universal Usado em astronomia, tem por base a rotação da Terra.
IAT International Atomic Time Tempo Atômico Internacional Sua base são os relógios atômicos.
A.M./P.M. Ante Meridiem/Post Meridiem (do latim) Antes do meio dia/Após o meio dia Usados em povos que consideram um ciclo de 12 horas.
HL Hora Legal Hora oficial do país.

DateTimeOffSet

Pensando em uma maneira de facilitar e melhorar ainda mas a forma de se conseguir identificar os possíveis fusos horários, bem como, trabalhar com estas variações de horário a Microsoft introduziu a partir da versão 2008 um tipo de dados chamado DateTimeOffSet, que basicamente combinava a possibilidade de armazenar valores do tipo data e hora em conjunto com uma representação numérica de fuso horário, conforme o exemplo abaixo:

SELECT CAST(‘2007-05-08 12:35:29. 1234567 +12:15’ AS time(7)) AS ‘time’,

CAST(‘2007-05-08 12:35:29. 1234567 +12:15’ AS date) AS ‘date’,

CAST(‘2007-05-08 12:35:29.123’ AS smalldatetime) AS ‘smalldatetime’,

CAST(‘2007-05-08 12:35:29.123’ AS datetime) AS ‘datetime’,

CAST(‘2007-05-08 12:35:29.1234567+12:15’ AS datetime2(7)) AS ‘datetime2’,

CAST(‘2007-05-08 12:35:29.1234567 +12:15’ AS datetimeoffset(7)) AS ‘datetimeoffset’,

CAST(‘2007-05-08 12:35:29.1234567+12:15’ AS datetimeoffset(7)) AS ‘datetimeoffset IS08601’;

AT TIME ZONE

Chegamos em 2016 e muito ainda se fala das necessidades em converter e armazenar valores de fuso horário diretamente em nossas tabelas de banco de dados, sabendo das dificuldades e também de como seria possível apresentar uma nova maneira de manipular datas e fuso horários a Microsoft introduziu a partir da versão 2016 a nova instrução AT TIME ZONE.

Sendo este responsável em converter um data e hora para o correspondente valor datetimeoffset em conjunto com seu respectivo valor de fuso horário de destino. Sua forma de uso é bastante simples, levando-se em consideração dois parâmetros:

  • Inputdate: Valor que representa um dado no formatos – SmallDateTime, DateTime, DateTime2 ou DateTimeOffSet que pode referenciar de forma clara um valor correspondente uma data no mundo real; e

 

  • Time Zone: Nome da zona de tempo do destino. O SQL Server se baseia em fusos horários que são armazenados no registro do Windows. Todos os fusos instalados no computador são armazenados no seguinte hive do registro: KEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones. Uma lista de fusos horários instalados também é exposta através da exibição de sys.time_zone_info, sendo esta também uma novidade adicionado no SQL Server 2016.

Dentre alguns valores existentes na sys.time_zone_info destaco alguns relacionados ao Brasil:

  1. Atlantic Standard Time;
  2. Bahia Standard Time;
  3. E. South America Standard Time;
  4. Pacific SA Standard Time;
  5. Tocantins Standard Time; e
  6. Central Brazilian Standard Time.

Por padrão o valor retornado na execução da AT TIME ZONE corresponde a um valor data e hora no formato DateTimeOffSet. Seguindo em frente vamos agora ver alguns exemplos de como podemos trabalhar com o mesmo valor de data e hora e obter alguns possíveis valores através da zona de fuso horário, para tal vamos utilizar os blocos de códigos  apresentados abaixo:

— Bloco de Código 1 – Exemplos de uso – AT TIME ZONE – Mesma data com Time Zone distintos — 

Select CONVERT(DateTime, GetDate()) AT TIME ZONE ‘Alaskan Standard Time’ As ‘Alaskan Standard Time’,
CONVERT(DateTime, GetDate()) AT TIME ZONE ‘SA Western Standard Time’ As ‘SA Western Standard Time’,
CONVERT(DateTime, GetDate()) AT TIME ZONE ‘Morocco Standard Time’ As ‘Morocco Standard Time’,
CONVERT(DateTime, GetDate()) AT TIME ZONE ‘Kaliningrad Standard Time’ As ‘Kaliningrad Standard Time’,
CONVERT(DateTime, GetDate()) AT TIME ZONE ‘W. Mongolia Standard Time’ As ‘W. Mongolia Standard Time’
Go

Note que o mesmo valor foi retornado de maneira diferente em relação ao seu respetivo time zone de acordo com o fuso horário identificado pelo SQL Server.

 

— Bloco de Código 2 – Exemplos de uso – AT TIME ZONE – Mesma data com horas diferentes no mesmo Time Zone —

SELECT CONVERT(datetime, ’08/29/2016 10:59:00′)  AT TIME ZONE ‘Central European Standard Time’;
SELECT CONVERT(datetime, ’08/29/2016  12:01:00′)  AT TIME ZONE ‘Central European Standard Time’;
SELECT CONVERT(datetime, ’08/29/2016  11:59:00 PM’)  AT TIME ZONE ‘Central European Standard Time’;

 

— Bloco de Código 3 – Exemplos de uso – AT TIME ZONE – Utilizando tabelas e inserindo valores de dados e seus respectivos Time Zone —

Declare @Calendario Table
(IDDia Int Primary Key Identity(1,1),
Data_FusoHorario DateTimeOffSet,
TimeZone Varchar(100))
Insert Into @Calendario Values (GetDate()-30 AT TIME ZONE ‘Alaskan Standard Time’, ‘Alaskan Standard Time’),
(GetDate()-75 AT TIME ZONE ‘SA Western Standard Time’,’SA Western Standard Time’),
(GetDate()+26 AT TIME ZONE ‘Morocco Standard Time’,’Morocco Standard Time’),
(GetDate()+98 AT TIME ZONE ‘Kaliningrad Standard Time’,’Kaliningrad Standard Time’),
(GetDate()+15 AT TIME ZONE ‘W. Mongolia Standard Time’,’W. Mongolia Standard Time’)
Select IDDia, Data_FusoHorario, TimeZone Data From @Calendario
Go
Ufa, é isso ai simples, fácil e prático……

Chegamos ao final de mais uma dica do mês.

Espero que você tenha gostado deste post,  acredito que as informações e exemplo publicadas aqui possam de alguma maneira ajudar e colaborar em suas atividades diárias, profissionais e ou acadêmicas.

Desejo um forte abraço, agradeço mais uma vez a sua visita.

Até mais.

Anúncios

Sobre Junior Galvão - MVP

Profissional com vasta experiência na área de Tecnologia da Informação e soluções Microsoft. Graduado no Curso Superior em Gestão da Tecnologia de Sistemas de Informação. Pós-Graduado no Curso de Gestão e Engenharia de Processos para Desenvolvimento de Software com RUP na Faculdade FIAP - Faculdade de Informática e Administração Paulista de São Paulo. Pós-Graduado em Gestão da Tecnologia da Informação Faculdade - ESAMC Sorocaba. Formação MCDBA Microsoft, autor de artigos acadêmicos e profissionais postados em Revistas, Instituições de Ensino e WebSistes. Meu primeiro contato com tecnologia ocorreu em 1995 após meus pais comprarem nosso primeiro computador, ano em que as portas para este fantástico mundo se abriram. Neste mesmo ano, comecei o de Processamento de Dados, naquele momento a palavra TI não existia, na verdade a Tecnologia da Informação era conhecida como Computação ou Informática, foi assim que tudo começou e desde então não parei mais, continuando nesta longa estrada até hoje. Desde 2001 tenho atuado como Database Administrator - Administrador de Banco de Dados - SQL Server em tarefas de Administração, Gerenciamento, Migração de Servidores e Bancos de Dados, Estratégias de Backup/Restauração, Replicação, LogShipping, Implantação de ERPs que utilizam bancos SQL Server, Desenvolvimento de Funções, Stored Procedure, Triggers. Experiência na Coordenação de Projetos de Alta Disponibilidade de Dados, utilizando Database Mirroring, Replicação Transacional e Merge, Log Shipping. Atualmente trabalho como Administrador de Banco de Dados no FIT - Instituto de Tecnologia da Flextronics, como também, Consultor em Projetos de Tunnig e Performance para clientes, bem como, Professor Titular na Fatec São Roque. Desde 2008 exerço a função de Professor Universitário, para as disciplinas de Banco de Dados, Administração, Modelagem de Banco de Dados, Programação em Banco de Dados, Sistemas Operacionais, Análise e Projetos de Sistemas, entre outras. Possuo titulações e Reconhecimentos: Microsoft MVP, MCC, MSTC e MIE.
Esse post foi publicado em Banco de Dados, Curiosidades, DBA, Descoberta, Dica do Mês, Dicas, Diversos, Inovações, Interoperabilidade, Microsoft, MSDN, Mundo SQL Server, Sistema Operacional, SQL Server, TechNet, VIRTUAL PASS BR, Virtualização, Windows, Windows Server. Bookmark o link permanente.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s