Avatar billede lytzen Nybegynder
24. juli 2000 - 01:55 Der er 4 kommentarer og
1 løsning

tid og dato

Hej!
Jeg vil gerne kunne indtaste et tidspunkt og en dato i hhv. to editboxe. Formatet skal for tidspunkt være tt:mm og for dato være ddmmåå.
Hvordan gemmer jeg nu de to informationer i en TDateTime, og hvordan henter jeg dem ud igen ? TDateTime indeholder jo både tid og dato.
Avatar billede pellelil Nybegynder
24. juli 2000 - 07:47 #1
Datoen ligger i heltals delen og tiden ligger i decimal delen (en TDateTime er blot et \"Floating Point\" tal). Nedenstående eksempel \"går over åen efter vand\" for at tælle dagen en op, men viser således hvordan du trækker dato og tid ud af en TDateTime, og hvordan du sætter dem tilbage.

<SNIP>
var
  dtDateTime : TDateTime;
  dtDate    : TDateTime;
  dtTime    : TDateTime;
begin
  dtDate := Int(dtDateTime);
  dtTime := dtDateTime-Int(dtDateTime);
  dtDate := dtDate + 1;
  dtDateTime := dtDate + (dtDateTime-Int(dtDateTime));
  // eller
  dtDateTime := dtDate + dtTime;
end;
</SNIP>

For at splitte datoen op i Dag, Månd År og tiden i Timer, Minutter Sekunder (og millisekunder) bruger du henholdvis: DecodeDate, EncodeDate, DecodeTime, EncodeTime
Avatar billede sjensen Nybegynder
24. juli 2000 - 10:11 #2
Det er jo pænt af pellelil at give sådan et eksempel, men som jo vist ikke helt svarer på det du spørger om:

Indholdet af en tdatetime er ganske rigtigt som pellelil siger en float (real) hvor heltalsdelen er antallet af dage siden 30-12-1899 og decimal delen er tidspunktet.

Præsentationen af datoen (og tiden) fra en tdatetime er afhængig af de regionale indstillinger under windows, d.v.s. der hvor du angiver dato og tidsformaterne.

Du kan med fordel sætte en variabel der hedder \"shortdateformat\" til dd-mm-åå (shortdateformat := \'dd-mm-yy\' i starten af dit program, så vil det virke med det datoformat, uanset hvad brugeren har sat op under windows.
(Jeg ville i øvrigt i det herrens år 2000 sætte formatet til dd-mm-yyyy for at vise årstallet med 4 cifre, men det er jo smag og behag)

Tegnene mellem dato, måned og år kaldes for \"DateSeparator\" og mellem timer, minutter og sekunder for \"TimeSeparator\". Disse to er konstanter Delphi kender og som det får fra indstillingerne under regionale.

Det er derfor vigtigt at din dato har samme format som indstillingerne i regionale (eller hvis du selv har sat shortdateformat i starten af programmet).

For at pakke en datetime ud til tekst kan du bruge funktionerne: DateTimeToStr(Tdatetime), DateToStr(Tdatetime) og TimeToStr(Tdatetime).

og omvendt kan du bruge StrToDateTime(string), StrToDate(string) og StrToTime(string).

Ud fra dette, og fra dit spm, ville jeg gøre sådan:

dette er dine variable:
var datotid : tdatetime;
    dato, tid : string;

Når du vil sætte datotid lig med indtastede dato og tid gør du sådan:

  datotid := StrToDateTime(copy(dato,1,2) +
                          dateseparator  +
                          copy(dato,3,2) +
                          dateseparator  +
                          copy(dato,5,2) + \' \' +
                          copy(tid,1,2)  +
                          timeseparator  +
                          copy(tid,4,2));

Det eneste du skal være opmærksom på er at hvis der er fejl i dine strenge vil StrToDateTime give en fejl, så du skal sikre at hhv. dato og tid strengene er i det rigtige format, og du kan med fordel bruge en Try, Except, End blok rundt om.

og når du vil sætte hhv. dato og tid strengene ud fra din datotid (tdatetime var) gør du sådan:

dato := DateToStr(datotid);
tid  := TimeToStr(datotid);

Jeg håber det giver dig lidt mere end pellelils svar ;-)
Avatar billede pellelil Nybegynder
24. juli 2000 - 11:02 #3
Så vidt jeg kan husker, så indeholdte det oprindelige spørgsmål teksten \"Hvordan gemmer jeg nu de to informationer i en TDateTime, og hvordan henter jeg dem ud igen ? TDateTime indeholder jo både tid og dato\" - på hvilket jeg gav et svar  :-)
Avatar billede sjensen Nybegynder
24. juli 2000 - 11:21 #4
ja ja, jeg sagde også \"ikke HELT svarer..\" !

Der er lige den krølle med editfelterne ;-)
Avatar billede lytzen Nybegynder
24. juli 2000 - 19:29 #5
Tak til jer begge for svarene! Jeg vælger at give sjensen points\'ne fordi den løsning er den mest beskrivende og letteste at gå til.
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