



Fala galera do Show Delphi, tudo beleza? Aqui quem fala é o Vitor e trago uma forma de formatação de código sem ferramentas externas
Caso o usuário digite uma data que não esteja no formato “dd/mm/aaaa”, hoje mostrarei como deixar nesse formato
procedure FormatarData(DataDoUsuario : Date); var sData : string; iX : integer; begin sData := DateToStr(DataDoUsuario); // Isto é opcional, só uma verificação se a data for vazia if (trim(sData) = '') or (sData.IsEmpty) then begin ShowMessage('Data vazia'); // Aqui você pode tratar como quiser a data vazia exit; // Eu só vou sair da procedure com o comando "Exit" end; { Caso o usuário Escreva 6/4/23 Iremos formatar para ficar 06/04/23 } // A função "posex" encontra uma string dentro de outra string e returno em qual local da string está através de um index // Nesse caso, estou a procura da '/' para ver se ele escreveu a data com o dia ou o mês com 1 caractere // A função 'posex' tem os parametros (subString: string; StringOriginal : string; IndexInicial : integer = 0) X := posex('/', sData); { Esse if verifica se o dia tem um caractere Por exemplo '6/04/23' A função 'posex' irá retornar 2 pois a '/' está na segunda posição na string '6/' Lembrando que a string sempre começa com o index 1, então a barra estaria com o index 2 } if X = 2 then s := '0' + sData; // Nessa linha Adiciona um 0 no inicio da string, então ficaria assim '06/04/23' { Este if verifica o mês Mas dessa vez passaremos o caractere de inicio na posição 4 por exemplo '06/4/23' A função posex começará a verificar pelo número 4 exemplo 2: '6/4/23' A função posex começará a verificar encima da segunda '/', e retornará 1 } X := posex('/', sData, 4); // Esse if verifica se a data está com 1 caractere no mês '06/4/23' if X = 5 then Insert('0', sData, 4); // A função Insert, insere uma string dentro de outra de acordo com uma posição // Nesse exemplo a função irá inserir a string '0' dentro da string sData começando pela posição 4 // que no meu caso fica assim '06/04/23 end; |
E caso o usuário digite uma data americana onde a formatação é ‘mm/dd/aaaa’
Podemos resolver em poucas linhas de código
var sData : string; begin sData := DateToStr(DataDoUsuario); // O comando copy usaremos para copiar o dia e o mês da data americana e colocaremos na posição da data brasileira sData := copy(sData, 4, 2) + '/' + copy(sData, 1, 2) + '/' + copy(sData, 7, 4); // A nossa data irá ser formatada para 'dd/mm/aaaa' end; |
E por último mas não menos importante, caso o nosso usuário digite uma data incompleta, como por exemplo ‘dd/mmaaaa’, ‘ddmm/aaaa’ ou ‘ddmmaaaa’
Sem nenhum separador
var sData : string; begin sData := DateToStr(DataDoUsuario); // Caso o usuário tenha escrito a data com só uma '/', iremos retirar-lá sData := StringReplace(s, '/', '', [rfReplaceAll]); // Após, inserimos as / nos locais corretos da data Insert('/', sData, 3); Insert('/', sData, 6); end; |
Então pessoal, espero que a dica pode ter ajudado e dúvidas ou sugestões em outras linguagens, deixe o seu comentário.
Uma abraço e até o próximo post. Valeu!
Você precisa fazer o login para publicar um comentário.
Prezados companheiros isto não é errado, mas há formas de formatar a data em todo o programa, aqui está como faço, na MainUnit:
procedure ConfigurePtRegion;
var
PtFormat: TFormatSettings;
begin
// Create new setting and configure for the Portuguese format
PtFormat := TFormatSettings.Create;
OldFormat:=PtFormat; // antes de alterar;
try
PtFormat.DecimalSeparator := ‘,’;
PtFormat.ThousandSeparator := ‘.’;
PtFormat.CurrencyDecimals := 2;
PtFormat.DateSeparator := #45; // Hyphen-minus ‘-‘;
PtFormat.ShortDateFormat := ‘yyyy-mm-dd’; // ‘dd/mm/yyyy’;
PtFormat.LongDateFormat := ‘yyyy-mm-dd’; // ‘dd/mm/yyyy’;
PtFormat.TimeSeparator := #58; // Colon’:’;
PtFormat.TimeAMString := ‘AM’;
PtFormat.TimePMString := ‘PM’;
PtFormat.ShortTimeFormat := ‘hh:nn’;
PtFormat.LongTimeFormat := ‘hh:nn:ss’;
PtFormat.CurrencyString := ‘€’;
PtFormat.NormalizedLocaleName := ‘PT/AZ’;
// Assign the App region settings to the newly created format
System.SysUtils.FormatSettings := PtFormat; //System.SysUtils.FormatSettings
finally
// System.SysUtils.FormatSettings:=False ; para a eventualidade dos users mecherem na maquuina, garantir que no programa não se alterar
end;
end;
depois:
initialization
if not ModuleIsPackage then begin
// uses HtmlHelpViewer
Application.HelpFile := ChangeFileExt(Application.ExeName, ‘.chm’);
// WM_SHELLHOOKMESSAGE := RegisterWindowMessage(‘SHELLHOOK’);
// HelpWindowManager := THelpWindowManager.Create;
end;
If SysLocale.PriLangID=LANG_PORTUGUESE Then
begin
ConfigurePtRegion;
//Prevents format settings being updated automatically when the user alters the system configuration
Application.UpdateFormatSettings := false; //Application.UpdateFormatSettings := True;
end;