Existem situações aonde informações de horário ou até mesmo datas necessitam serem informadas para um sistema. Algumas vezes esta informação deve ser preenchida pelo usuário, porém em outras o próprio sistema deve obtê-las de forma automatizada, evitando erros de digitação, fraudes ou simplesmente para facilitar o trabalho.
Quando esta informação é obtida de forma automática surge à dúvida se é possível confiar no horário que está sendo apresentado pelo computador do usuário. Em ambientes corporativos geralmente os administradores de redes definem regras que garantem esse tipo de informação. Mas criar uma aplicação baseada nessa confiança não seria a melhor alternativa.
Em linguagem de programação Progress é possível definir uma origem mais confiável para obter informações automáticas de datas e horas. É possível escolher, a qualquer momento na aplicação, que as datas serão obtidas do servidor onde um determinado banco está carregado ou localmente da máquina do usuário. Isso é feito utilizando a variável de sessão SESSION, conforme o exemplo a seguir:
SESSION:TIME-SOURCE = "mgadm".
DISPLAY STRING(TIME,"HH:MM:SS").
Quando este código for executado será exibido o horário utilizado no servidor onde o banco "mgadm" está servido.
O próximo código, ao invés de obter o horário de um servidor, exibe o horário do equipamento utilizado pelo usuário:
SESSION:TIME-SOURCE = "local".
DISPLAY STRING(TIME,"HH:MM:SS").
Este é o comportamento padrão de um programa Progress. Se a origem não for alterada em momento algum, ela sempre será obtida do computador local.
Este artifício muitas vezes pode trazer problemas para ambientes onde os servidores de bancos de dados e os usuários estão geograficamente distantes, em lugares com fuso-horário diferentes. Essa situação é agravada com a adoção de horários alternativos por alguns Estados, como o nosso Horário Brasileiro de Verão.
Para suportar este cenário é possível em um mesmo servidor carregar bases de dados com horários diferentes. No momento de carga da base de dados o horário da máquina é obtido pelo processo servidor. Alterações de horário efetuadas após a carga não interferem nos bancos já carregados. Isso permite configurar um fuso-horário para cada banco de dados, utilizando para isso a variável de ambiente TZ (Time Zone).
Neste exemplo, vamos carregar dois bancos de dados em um mesmo servidor, com diferença de 1 hora entre cada um:
export TZ=FST2FDT
proserve banco1 <demais parâmetros>
export TZ=BST3
proserve banco2 <demais parâmetros>
A sintaxe utilizada neste exemplo para definição da variável TZ é para ambientes UNIX/Linux. Para ambientes Windows os valores são os mesmos, apenas substitua o comando export por set.
A seguir alguns valores válidos para a variável de ambiente TZ, com o seu descritivo:
GMT0 --> Greenwich Mean Time
UTC0 --> Universal Coordinated Time
FST2FDT --> Fernando De Noronha Std
BST3 --> Brazil Standard Time
WST4WDT --> Western Standard (Brazil)
AST5ADT --> Acre Standard Time
Estes valores foram obtidos do site: http://science.ksc.nasa.gov/software/winvn/userguide/3_1_4.htm