ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Ano de uma data 4 dígitos?

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17335

MensagemEnviada: Qua Out 09, 2019 3:03 pm    Assunto: Ano de uma data 4 dígitos? Responder com Citação

Tenho aqui um retorno de uma tabela excel assim 04/05/52

Uma variavel string que recebe o valor acima em negrito chamada RecDataLista

E a propriedade que recebe chamada Fdatanascimento tipo Date;

Mais ao receber
Código:
Fdatanascimento :=   StrToDateDef(ConvDataBanco, 0);


Em vez de vir 04/05/1952, esta vindo 04/05/2052

Como resolvo isso?
_________________
Quer uma bateria musical profissional completa em seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.hhopdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
rodrigoprado
Colaborador
Colaborador


Registrado: Terça-Feira, 24 de Mai de 2005
Mensagens: 1052
Localização: Curitiba/PR

MensagemEnviada: Qua Out 09, 2019 3:48 pm    Assunto: Responder com Citação

Poderia sugerir, no excel, vir tratado isso no formato 'dd/mm/aaaa', assim não precisaria se preocupar com codificações, não custa nada do outro lado já enviar no formato correto
_________________
- Compartilhe seus conhecimentos -
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17335

MensagemEnviada: Qua Out 09, 2019 3:54 pm    Assunto: Responder com Citação

rodrigoprado escreveu:
Poderia sugerir, no excel, vir tratado isso no formato 'dd/mm/aaaa', assim não precisaria se preocupar com codificações, não custa nada do outro lado já enviar no formato correto
Olá rodrigoprado, o problema é que recebo inúmeras lista de excel de vários clientes que não padronizam, ai tenho que me virar do meu lado aqui para validar tudo. Mais caso não tenha algo nativo no delphi eu vou ter que criar um método para validar isso.

Obrigado.
_________________
Quer uma bateria musical profissional completa em seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.hhopdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17335

MensagemEnviada: Qua Out 09, 2019 4:41 pm    Assunto: Responder com Citação

Não sei se um tipo de gambiarra dessa resolve.

Código:
/// Verifica data
        /// Se o retorno for 6 digitos sem as barras é sinal que o ano esta com dois digitos
        ///  ai precisa converter porém ver se o período é maior que ano 2000
        if Length(StrNumber(ConvDataBanco)) = 6 then
        begin
          dData := StrToDateDef(ConvDataBanco, 0);
          if dData > Date then
            ConvDataBanco := Copy(DateToStr(dData), 1, 2) + '/' +
           Copy(DateToStr(dData), 4, 2) + '/' + '19' +
           Copy(DateToStr(dData), 9, 2);
        end;


O que fiz foi: Verifico o tamanho do retorno usando um metódo chamado strnumber que retira tudo que não for numero e retorna numeros, ai vejo se o tamanho esta em 6 ai numa variavel tipo data converto o valor no caso como disse acima o retorno voltou em 04/05/2052, ai comparo se a data for maior que a data atual ai faço esta troca de 20, para 19.

Não sei se vai dar certo, mais não sei como fazer de outra forma.
_________________
Quer uma bateria musical profissional completa em seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.hhopdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11308

MensagemEnviada: Qua Out 09, 2019 4:48 pm    Assunto: Responder com Citação

Boa tarde,

Experimente configurar a variável global TwoDigitYearCenturyWindow.
O valor dessa variável é subtraído do ano atual para a definição do século.
Considerando que estamos em 2019 e que o seu valor padrão é 50, temos 2019 - 50 = 1969, então entre 69 e 99 é convertido para 19 e o restante para 20.
Se você por exemplo alterar o valor dessa variável para 80, entre 39 e 99 será convertido para 19.

Espero que ajude

_________________
Assinatura: https://www.imoveisemexposicao.com.br/imoveis-venda-guarulhos!bonsucesso-residencial-apartamento
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17335

MensagemEnviada: Qui Out 10, 2019 8:46 am    Assunto: Responder com Citação

imex escreveu:
Boa tarde,

Experimente configurar a variável global TwoDigitYearCenturyWindow.
O valor dessa variável é subtraído do ano atual para a definição do século.
Considerando que estamos em 2019 e que o seu valor padrão é 50, temos 2019 - 50 = 1969, então entre 69 e 99 é convertido para 19 e o restante para 20.
Se você por exemplo alterar o valor dessa variável para 80, entre 39 e 99 será convertido para 19.

Espero que ajude

_________________
Assinatura: https://www.imoveisemexposicao.com.br/imoveis-venda-guarulhos!bonsucesso-residencial-apartamento


Bom dia Imex, então até fiz o teste cfe abaixo
Código:
procedure TForm1.Button1Click(Sender: TObject);
var
  myDate : TDateTime;
  formattedDate : string;

begin
  // Set up a date from a 2 digit year using the default threshold
  myDate := StrToDate('09/05/30');
  ShowMessage('09/05/30 using  default threshold = '+DateToStr(myDate));

  // Now change the default threshold to 80 :
  // 2002 (at time of writing) - 80 gives 1922
  // 30 is above 22, so 1900 century is chosen
  TwoDigitYearCenturyWindow := 80;
  myDate := StrToDate('09/05/30');
  ShowMessage('09/05/30 using override threshold = '+DateToStr(myDate));
end;


Mais não deu certo não o exemplo, outra coisa consegui fazer apenas no D7 que esta na unit SysUtils, ja no XE6 que eu uso não reconhece o TwoDigitYearCenturyWindow e não sei se ainda existe ou meu XE6 esta sem ele.

De qualquer forma no exemplo acima mostrado ficou 2030 os dois modos.
Fonte
http://www.delphibasics.co.uk/RTL.asp?Name=TwoDigitYearCenturyWindow
_________________
Quer uma bateria musical profissional completa em seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.hhopdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11308

MensagemEnviada: Qui Out 10, 2019 9:25 am    Assunto: Responder com Citação

Bom dia,

Nas versões mais novas do Delphi a TwoDigitYearCenturyWindow está dentro do record TFormatSettings. Experimente configurar a variável global FormatSettings.TwoDigitYearCenturyWindow.
Sobre o seu teste, como estamos em 2019, se você configurar o valor para 80 será considerado 1900 a partir de 39. Se você por exemplo aumentar para 90 será a partir de 29, ou se aumentar para 99 será a partir de 20.

Espero que ajude
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17335

MensagemEnviada: Qui Out 10, 2019 9:39 am    Assunto: Responder com Citação

imex escreveu:
Bom dia,

Nas versões mais novas do Delphi a TwoDigitYearCenturyWindow está dentro do record TFormatSettings. Experimente configurar a variável global FormatSettings.TwoDigitYearCenturyWindow.
Sobre o seu teste, como estamos em 2019, se você configurar o valor para 80 será considerado 1900 a partir de 39. Se você por exemplo aumentar para 90 será a partir de 29, ou se aumentar para 99 será a partir de 20.

Espero que ajude
Agora entendi Imex.

Obrigado.
_________________
Quer uma bateria musical profissional completa em seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.hhopdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB