campo data como colocar o ano corrente

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
Luciano Bonfim
Usuário Nível 3
Usuário Nível 3
Mensagens: 414
Registrado em: 23 Ago 2007 09:34
Localização: Rio de Janeiro / São Paulo
Contato:

campo data como colocar o ano corrente

Mensagem por Luciano Bonfim »

Preciso que dentro de um GET de campo data o ano seja preenchido automaticamente depois que o usuário digitar o dia e o mês.

exemplo:

Código: Selecionar todos

set date brit
set century on
set epoch to 1990
data=ctod("")
@ 1,1 get data
read
se o usuário digitar 01/04 e der enter em vez de aparecer 01/04/2000 que é o que acontece atualmente eu queria que aparecesse 01/04/2008 ou outro ano que eu quiser.

Alguem sabe como fazer isso?

pensei em fazer no VALID mas quando chega no VALID a data já está com o ano 2000 e näo tem como de eu saber se o usuário preencheu realmente esse 2000 ou foi o xharbour que colocou automaticamente.

uso xharbou 1.0.0

Muito Obrigado
Muito Obrigado,

Luciano Bonfim de Azevedo
www.bonfim.com.br
luciano@bonfim.com.br
www.linkedin.com/in/lucianobonfim
Skype : lucianobonfim
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem por sygecom »

Código: Selecionar todos

set date brit
set century on
set epoch to 1990
data=date()
@ 1,1 get data
read 
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
Luciano Bonfim
Usuário Nível 3
Usuário Nível 3
Mensagens: 414
Registrado em: 23 Ago 2007 09:34
Localização: Rio de Janeiro / São Paulo
Contato:

Mensagem por Luciano Bonfim »

Caro Leonardo,

näo posso fazer assim pq as datas tem que estar em branco inicialmente, näo podem já vir preenchidas.

Muito Obrigado
Muito Obrigado,

Luciano Bonfim de Azevedo
www.bonfim.com.br
luciano@bonfim.com.br
www.linkedin.com/in/lucianobonfim
Skype : lucianobonfim
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Mas o SET EPOCH não resolve? Mesmo com o preenchimento parcial, sem o ano, essa configuração deveria preencher o ano.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem por sygecom »

Veja abaixo as inumeras funções que podem lhe auxiliar em formatações de HORA e DATA:

AddMonth() adiciona ou retira um número de meses para / de um valor de data.
BoM() retorna a data do primeiro dia de um mês.
BoQ() retorna a data do primeiro dia de um trimestre.
BoY() retorna a data do primeiro dia de um ano.
CDoW() retorna o nome de um dia da semana a partir de uma data.
CMonth() retorna o nome de um mês a partir de uma data.
CtoD() converte uma seqüência de caracteres em uma data valor CtoDoW() retorna o número de um dia da semana do seu nome.
CtoMonth() retorna o número de um mês de seu nome.
CtoT() converte uma seqüência de caracteres em um DateTime valor Data() retorna a data atual do sistema operacional.
DateTime() retorna a data e hora atuais do sistema operacional.
Day() extrai o dia Numérico Número de um valor de data.
Days() calcula o número de dias de segundos decorridos.
DaysInMonth() retorna o número de dias em um mês.
DaysToMonth() retorna o número de dias para o início de um mês de janeiro primeiro.
DMY() Uma data como "dd. mês yyyy" formatos
DoW() determina o dia da semana a partir de uma data numérico.
DoY() retorna o número de um valor de data dia em um ano.
DtoC() converte um valor de data em uma seqüência de caracteres no formato Data Set.
DtoS() converte um valor de data em uma seqüência de caracteres no formato AAAAMMDD.
ElapTime() calcula que o tempo decorrido entre um início e uma hora de término.
EoM() retorna a data do último dia de um mês.
EoQ() retorna a data do último dia de um trimestre.
EoY() retorna a data de último dia de um ano.
HOUR() extrai a hora de um IsLeap() valor dateTime verifica se um valor de data pertencer a um ano bissexto.
LastDayoM() retorna o número de dias em um mês.
MAX() retorna o maior valor de duas Numerics ou datas.
MDY() formatos uma data como "Mês dd, aa".
MilliSec() define um tempo de espera em milissegundos.
MIN() retorna o valor de duas datas ou Numerics smallerr.
MINUTE() extrai o minuto de uma Month() valor dateTime extrai o mês Numérico Número de um valor de data.
NtoCDoW() converte um dia da semana numérico ao nome.
NtoCMonth() converte um mês numérico ao nome.
Quarter() retorna o trimestre que pertence a uma data.
Seconds() retorna que o número de segundos transcorrido desde a meia-noite SecondsCpu() retorna o tempo de CPU usado pelo processo atual.
Secs() calcula o número de segundos de uma seqüência tempo.
SecToTime() Converts numéricos segundos em uma hora formatado a seqüência de caracteres.
SetDate() altera a data do sistema de um valor de data.
SetNewDate() altera a data do sistema a partir dos valores numéricos.
SetNewTime() altera a hora do sistema a partir dos valores numéricos.
SetTime() altera a hora do sistema de uma seqüência de tempo.
ShowTime() exibe a hora do sistema continuamente em uma posição de tela especificado.
Converts StoD() um "AAAAMMDD" formatado seqüência para uma data valor StoT() converte um "YYYYMMDDhhmmss.ccc" formatado seqüência a um SX_DtoP() valor dateTime converte um valor de data em uma seqüência caracteres 3 bytes.
SX_PtoD() Unpacks um valor de data 3 bytes compactados.
TIME() recupera a hora do sistema como uma seqüência de caracteres formatada.
TimeToSec() calcula o número de segundos desde a meia-noite.
TimeValid() verifica se uma seqüência de caracteres é uma seqüência de tempo válido.
TString() Converts numéricos segundos em uma hora formatado a seqüência de caracteres.
TtoC() converte um valor datetime em uma seqüência de caracteres no formato Data Set e Set time.
TtoS() converte um valor de data em uma seqüência de caracteres no formato YYYYMMDDhhmmss.ccc.
WaitPeriod() define um período de espera e permite loops tempo controlado.
Calculates Week() a semana numéricos a partir de uma data.
WoM() calcula o número da semana em um mês.
YEAR() extrai o ano numérico de um valor de data
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
Luciano Bonfim
Usuário Nível 3
Usuário Nível 3
Mensagens: 414
Registrado em: 23 Ago 2007 09:34
Localização: Rio de Janeiro / São Paulo
Contato:

Mensagem por Luciano Bonfim »

sim maligno preenche com o ano, só que com o ano 2000 em vez de 2008 que é que eu quero. Já tentei outras combinaçöes de set epoch e näo resolveu ele coloca 2100
Muito Obrigado,

Luciano Bonfim de Azevedo
www.bonfim.com.br
luciano@bonfim.com.br
www.linkedin.com/in/lucianobonfim
Skype : lucianobonfim
Avatar do usuário
Luciano Bonfim
Usuário Nível 3
Usuário Nível 3
Mensagens: 414
Registrado em: 23 Ago 2007 09:34
Localização: Rio de Janeiro / São Paulo
Contato:

Mensagem por Luciano Bonfim »

Leonardo,

o meu grande problema é que antes de eu "pensar" em tratar essa data o xharbour já coloca o 2008 pra mim (acredito que seja o tal do getsys.prg que faz isso, né)
Muito Obrigado,

Luciano Bonfim de Azevedo
www.bonfim.com.br
luciano@bonfim.com.br
www.linkedin.com/in/lucianobonfim
Skype : lucianobonfim
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Se for semelhante ao Clipper, deve ter sim um GETSYS por trás da coisa. Sendo assim, talvez tenha como configurar o bloco de critica de data. Se der pra fazer isso, você mesmo poderá tratar a data com funções simples.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem por Pablo César »

Em Clipper eu posso dizer com certeza que o caminho estaria no GETSYS, mas no xHarbour eu não sei se pode fazer uso do GETSYS. De todas formas eu tenho outra sugestão para te fazer Luciano.

No seu GET faça uma pre-validação através de uma função que reproduza a digitação na seção do ANO da variável do seu GET, assim por exemplo:

Código: Selecionar todos

FUNCTION MAIN()
SET DATE TO BRITISH
SET CENTURY ON
VAR1:=CTOD("  /  /    ")
CLS
@ 12,00 SAY "TESTE: "
@ 12,20 GET VAR1 WHEN POEANO(VAR1)
READ
RETURN NIL

FUNCTION POEANO(VAR1)
KEYBOARD REPLICATE(CHR(4),4)+STRZERO(YEAR(DATE()),4,0)+REPLICATE(CHR(19),4)
RETURN .T.
Eu compilei em xHarbour e deu certo. Espero ter ajudado.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
Luciano Bonfim
Usuário Nível 3
Usuário Nível 3
Mensagens: 414
Registrado em: 23 Ago 2007 09:34
Localização: Rio de Janeiro / São Paulo
Contato:

Mensagem por Luciano Bonfim »

Grande Pablo...

ótima idéia... alterando conforme abaixo funcionou perfeito

Código: Selecionar todos


FUNCTION POEANO(VAR1)
local caracter
if empty(var1)
   caracter=lastkey()
   KEYBOARD REPLICATE(CHR(4),4)+STRZERO(YEAR(DATE()),4,0)+CHR(K_HOME)+chr(caracter)
endif
RETURN .T.


Muito Obrigado,

Luciano Bonfim de Azevedo
www.bonfim.com.br
luciano@bonfim.com.br
www.linkedin.com/in/lucianobonfim
Skype : lucianobonfim
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Mensagem por gvc »

O set epoch configura o campo data para trabalhar com a entrada do "século".
set epoch to 1930.
todas as datas que tiverem o ano digitado abaixo de 30, será transformado para 20xx. (Ex. ano 19, será transformado para 2019. ano 35 será transformado em 1935)

Código: Selecionar todos

set date brit
set century on
set epoch to 1990
data= date() // data de hoje.
@ 1,1 get data
read 
Com isso vc terá a data do dia e o ano já esta completo, não depenendo da digitação.

Espero ter ajudado. Boa sorte.
"TRS-80/Sincler/Apple/PC - Clipper Winter 85, tlink 1.0 [pc 10 MHz - 640K] {NEZ 8000 2Kb RAM}"
{POG - Programação Orientada a Gambiarra}
Responder