Ir para conteúdo
  • Cadastre-se

dev botao

1/2 Off - Padrão da Hora Windows


Ver Solução Respondido por Valdir Dill,
  • Este tópico foi criado há 1880 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Membros Pro

Bom dia,

Estamos tendo rejeições de NFCes por problema de padrão de hora configurada incorretamente no Windows do usuário.
Ele tem configurada a hora no padrão 12 horas ao invés do padrão 24.

Aí ele gera uma nota no sistema às 15:00, mas no XML acaba indo 03:00 horas, o que logicamente, será incorreto e gerará a rejeição.

A minha pergunta/questão é: existe alguma rotina em Delphi para se verificar se a hora está no padrão 12/24?
Se existir, o sistema poderia verificar e impedir que o usuário tomasse rejeição por esse motivo.

Tentei algo assim:

Var
 VFormats : TFormatSettings;
begin
 GetLocaleFormatSettings(LOCALE_USER_DEFAULT, VFormats);
 if VFormats.ShortDateFormat = 'HH:MM' then ShowMessage('Está no formao 24')
 else if VFormats.ShortDateFormat = 'hh:mm' then ShowMessage('Está no formao 12').
end;

Mas isso não funciona. Parece que não é o maiúsculo e minúsculo que define o padrão configurado.
Essa rotina acima foi a única coisa que encontrei sobre o assunto nas pesquisa por aí.

Se alguém tiver alguma dica...
Obrigado.
 

Valdir Dill

Rio de Janeiro - RJ

 

 

Link para o comentário
Compartilhar em outros sites

  • Membros Pro
  • Solution

 

23 horas atrás, valdirdill disse:

Bom dia,

Estamos tendo rejeições de NFCes por problema de padrão de hora configurada incorretamente no Windows do usuário.
Ele tem configurada a hora no padrão 12 horas ao invés do padrão 24.

Aí ele gera uma nota no sistema às 15:00, mas no XML acaba indo 03:00 horas, o que logicamente, será incorreto e gerará a rejeição.

A minha pergunta/questão é: existe alguma rotina em Delphi para se verificar se a hora está no padrão 12/24?
Se existir, o sistema poderia verificar e impedir que o usuário tomasse rejeição por esse motivo.

Tentei algo assim:

Var
 VFormats : TFormatSettings;
begin
 GetLocaleFormatSettings(LOCALE_USER_DEFAULT, VFormats);
 if VFormats.ShortDateFormat = 'HH:MM' then ShowMessage('Está no formao 24')
 else if VFormats.ShortDateFormat = 'hh:mm' then ShowMessage('Está no formao 12').
end;

Mas isso não funciona. Parece que não é o maiúsculo e minúsculo que define o padrão configurado.
Essa rotina acima foi a única coisa que encontrei sobre o assunto nas pesquisa por aí.

Se alguém tiver alguma dica...
Obrigado.
 

O VFormats.ShortDateFormat que postei inicialmente está errado. O correto é VFormats.ShortTimeFormat.  

Bom dia,

Consegui uma solução. O problema ocorria porque GetLocaleFormatSettings(LOCALE_USER_DEFAULT, VFormats) traz sempre  todo o texto em minúsculo. Aí não tem como avaliar se está configurado para 12 horas (hh:mm) ou para 24 horas (HH:MM).

A solução é ler diretamente no registro. Deixo a função para quem sabe ajudar outros.

class function TFuncPubl.GetHoraCurtaFormat : String;
Var
 VReg : Tregistry;
begin
 //não pode usar o GetLocaleFormatSettings( aqui pqe essa função retorna sempre tudo em minúsculo. Aí sempre daria erro.
 result := 'HH:MM'; //para se der erro retornar o correto do GFIL.

 VReg := TRegistry.Create;
 try
  VReg.RootKey := HKEY_CURRENT_USER;
  VReg.OpenKey('Control Panel\International', false);

  result := VReg.ReadString('sShortTime');
 finally
  FreeAndNil(VReg);
 end;
end;

 

Tópico resolvido.

Obrigado.

  • Curtir 3

Valdir Dill

Rio de Janeiro - RJ

 

 

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 1880 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.