Avatar billede pigbear Nybegynder
03. februar 2003 - 18:16 Der er 14 kommentarer og
1 løsning

Hvodan lave en dato om til tal

Hej

Er der nogen der ved hvordan jeg kan lave en dato om til
et tal, og omvendt et tal om til en dato ?

Jeg har behov for at køre en select sætning i en accessdatabase ud fra dato, men access lystrer ikke rigtigt når man bruger datotyper, så derfor har jeg tænkt mig at bruge et tal istedet.
Datoen får jeg fx fra DateTimePicker og det skal konverteres til tal og gemmes i databasen! Så kan jeg selecte på størrelsen af tallet istedet for !

Mvh

PigBear
Avatar billede r9 Nybegynder
03. februar 2003 - 18:22 #1
Date d = new Date(System.currentTimeMillis());
        System.out.println(d.toString());

        long l = d.getTime();
        System.out.println(l);



giver:
Mon Feb 03 18:19:02 CET 2003
1044292742015
Avatar billede r9 Nybegynder
03. februar 2003 - 18:25 #2
Så gemme du tallet i databasen (long)
og når du igen skal lave din dato, så skriver du:

Date d = new Date(1044292742015l); <----- HUSK det lille (l)
System.out.println(d.toString());
Avatar billede r9 Nybegynder
03. februar 2003 - 18:34 #3
Selve sammenligningen kan laves således:


Date d = new Date(1044292742015l);  // Mon Feb 03 18:19:02 CET 2003
Date d2 = new Date(1044293288421l); //Mon Feb 03 18:28:08 CET 2003

int res = d.compareTo(d2);
System.out.println(res);

res bliver 0, hvis de 2 datoer er ens.
og -1 hvis  hvis d2 ligger før d
og 1 hvis d2 ligger efter d
Avatar billede martinlind Nybegynder
03. februar 2003 - 18:36 #4
TDateTime kan castes til en Float
Avatar billede borrisholt Novice
03. februar 2003 - 18:38 #5
var
  f : Real;
begin
  f := DateTimePicker1.DateTime;
  DateTimePicker1.DateTime := f;
end;
Avatar billede r9 Nybegynder
03. februar 2003 - 18:40 #6
ups. Dette er vist delphi, og ikke java :-((
sorry...
Avatar billede stoney Nybegynder
03. februar 2003 - 20:49 #7
Der er ingen problemer med Delphi/Access
Du skal bare bruge params

procedure TForm1.Button1Click(Sender: TObject);
begin
with ADOQuery1 do begin

  with SQL do begin
    Clear;
    Add('SELECT * from tabel1');
    add('where Dato = :paramdato');

    ADOQuery1.Parameters.ParamByName('paramdato').Value :=  strtodate(edit1.text);


  end;
  Open;
  ;
  end;
  end;

Stoney
Avatar billede razersedge Nybegynder
03. februar 2003 - 23:40 #8
Tag et kig på DecodeDate i hjælpen
Avatar billede razersedge Nybegynder
03. februar 2003 - 23:41 #9
Returns Year, Month, and Day values for a TDateTime value.

Unit

SysUtils

Category

datetime routines

Delphi syntax:

procedure DecodeDate(Date: TDateTime; var Year, Month, Day: Word);


Description

The DecodeDate procedure breaks the value specified as the Date parameter into Year, Month, and Day values. If the given TDateTime value has a negative (BC) year, the year, month, and day return parameters are all set to zero.
Avatar billede razersedge Nybegynder
03. februar 2003 - 23:43 #10
var
wYear,wMonth,wDay : Word;
begin
DecodeDate(now,wYear,wMonth,wDay);
end;


Herefter har du de forskellige tal i de 3 word variabler..
Avatar billede pigbear Nybegynder
06. februar 2003 - 16:31 #11
Jeg takker for svaret fra jer, men det er desværre ikke lige det jeg har brug for !
Det med params i sqlsætningen virker ikke altid, og derfor ønsker jeg ikke at bruge det !
Vedr. decodedate er det det samme som at kopiere dag, månded og år ud af dato-strengen, med det giver ikke et tal som jeg rigtig kan bruge ! Jeg kunne måske
splitte datoen fx 03-04-2003 så:
Dag blev 03
Mdr blev 04
Aar blev 2003

og derefter sætte den sammen således: 20030403, så ville jeg have et tal, men
jeg ville helst undgå denne løsning, og efterlyser blot en funktion der kan lave en dato om til tal.. fx ved jeg at 01-01-1980 er det samme som 1, men jeg kan ikke rigtig finde ud af at lave et nummer ud fra en anden dato !

Mvh

PigBear
Avatar billede martinlind Nybegynder
06. februar 2003 - 16:34 #12
Prøv at kig engang i online hjælpen på Typen TDateTime den er lige en Real og en TDateTime kan behandles som en sådan uden problemer !!
Avatar billede nop Nybegynder
11. februar 2003 - 14:07 #13
function getMyDate(d: TdateTime): integer;
begin
    result:=trunc(d-encodeDate(1980,1,1));
end; //myDate

procedure TForm1.FormCreate(Sender: TObject);
begin
    edit1.Text:=intToStr(getMyDate(encodedate(2003,2,11)));
end;
Avatar billede nop Nybegynder
11. februar 2003 - 14:12 #14
...1/1-1980 bliver altså "0" i mit svar, læg en til hvis ønsket i funktionen.
Der tælles i dage (!), idag = 8442 siden 1/1-1980.
Og det kan bruges i sql fx
fx: sql:='select * from tabel where dage <= 8442'
vil udvælge poster op til og med i dag.
--nop
Avatar billede pigbear Nybegynder
21. februar 2003 - 11:41 #15
Mange tak for svar.. det var lige det jeg manglede !

->PigBear
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB

Rambøll Management Consulting

Senior Software Engineer

Riskpoint A/S (Riskpoint Solutions Limited)

Senior Developer

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Cyberdivisionen søger en IT-supporterelev til lokal IT på Haderslev Kaserne