Página 1 de 1

campo data como colocar o ano corrente

Enviado: 12 Abr 2008 15:50
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

Enviado: 12 Abr 2008 16:15
por sygecom

Código: Selecionar todos

set date brit
set century on
set epoch to 1990
data=date()
@ 1,1 get data
read 

Enviado: 12 Abr 2008 16:36
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

Enviado: 12 Abr 2008 16:47
por Maligno
Mas o SET EPOCH não resolve? Mesmo com o preenchimento parcial, sem o ano, essa configuração deveria preencher o ano.

Enviado: 12 Abr 2008 16:55
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

Enviado: 12 Abr 2008 17:05
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

Enviado: 12 Abr 2008 17:09
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é)

Enviado: 12 Abr 2008 17:14
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.

Enviado: 13 Abr 2008 10:00
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.

Enviado: 13 Abr 2008 14:15
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.



Enviado: 15 Abr 2008 10:02
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.