Bem amigos.. o objetivo deste tópico é calcular o valor de uma hora em determinado local, considerando a diferença de fuso desse local e o horário UTC (Coordinate Intnernational Time) ou GMT
Escolheremos para este cálculo a localidade de: ALASKA, denominada de
Alaskan Stardad Time
Horário em relação UTC = -09:00
Suponhamos que o horário UTC seja 09:00
Então o horário do Alaka seria 09:00 - 09:00 = 00:00
Até ai tudo bem, mas e quando o horário UTC for 08:00?
Pela lógica o horário no Alaska seria 08:00 - 09:00 = -1 !!!!
e como sabemos o a faixa de horário vai de 0 a 24 h, então como fazer para nesse caso o horário se mostrado
ao invés de -1 como 23:00?
Bem tentarei explicar no código abaixo:
'*************************
'Criado por Harysoh Pina
'Em 19/07/2001
'*************************
'Aqui o case para quando o texto em minha caixa for da localidade "Alaska"
Case Is = "Alaskan Standard Time"
Dim DifFuso As Double, DifFusoX As Date 'Declaro as variáveis para uso na diferença de fuso do Alaska (-9). Observem que uso duas classes de variáveis para uso em momentos distíntos do código (uma String e outra Date)
Dim DifFusoINI As Double, DifFusoINIx As Date 'Declaro as variáveis para uso na data UTC, que se encontra em uma caixa texto no form. Esta data é conseguida com uma função que utiliza a data do sistema para a conversão em data UTC. Observem que uso duas classes de variáveis para uso em momentos distíntos do código (uma String e outra Date)
DifFuso = HrDbl("9:00") 'Aqui aplico a difereça de fuso do Alaska como uma String, e utilizo uma função (HrDbl) para transformá-la em Double horário decimal (9:00 = 9,0)
DifFusoX = HrStr(DifFuso) 'Aqui pego a variável DifFuso e aplico a variável DifFusoX convertendo-a para horas através da função (HrStr), me retornando uma variável 9:00
DifFusoINI = HrDbl(Format([txtTimeGMT], "hh:mm")) 'Aqui aplico na variável DifFusoIni a data do sistema devidamente formatada, aplicando a conversão da mesma para formato double através da função HrDbl x:xx
DifFusoINIx = HrStr(DifFusoINI) 'Aqui aplico a váriavel DifFusoINI a variável DifFusoINIx, me retornando uma variável horas através da função (HrStr)
DifFusoINIx = FormatInterval(DifFusoINIx, "H:MM") 'Aqui uso uma função para transformar a variável em formato de horas permitindo o devido cálculo
DifFusoX = FormatInterval(DifFusoX, "H:MM")'Aqui uso uma função para transformar a variável em formato de horas permitindo o devido cálculo
'Defino algumas variáveis para executar o cálculo da diferença de fuso ente o Alaska e UTC
Dim X As String 'Variável para hora do sistema
Dim Y As String 'Variável para a diferença de fuso
Dim StrResult As String 'Váriável que recebe o resultado do cálculo
X = Left(DifFusoINIx, 5) 'Como a função HrStr e HrDbl so aceitam valores no formato hh:00 é necessário extrair apenas essa parte da variável
Y = Left(DifFusoX, 5)'Como a função HrStr e HrDbl so aceitam valores no formato hh:00 é necessário extrair apenas essa parte da variável
X = HrDbl(X) 'Transformo a veriável X em Double Decimal
Y = HrDbl(Y)'Transformo a veriável Y em Double Decimal
'Aqui faço o procedimento de soma que para resultados - somo com 24 para me retornar o valor pretendido, assim no lugar de -1 mostrará 23:00
StrResult = HrStr(24 + (X - Y))
MsgBox (StrResult)
Perfect!!!
Grato a todos
Última edição por Harysohn em 19/7/2011, 17:22, editado 1 vez(es)