Avatar billede ripley Nybegynder
16. april 1999 - 00:00 Der er 10 kommentarer og
1 løsning

TDateTime

Min "højtelskede" datatype i Delphi; TDateTime volder mig problemer:
Hvordan initialiserer man en attribut af denne type?
Man kan ikke sætte den til nil.
Null duer heller ikke - den compiler ganske vist fint, men det går helt i koks, når man f.eks. prøver at oprette et objekt.
At sætte den til 0 er heller ikke en løsning, da man så sætter den til en bestemt dato - og det var jo ikke det, der var meningen. Er der nogen, der kan give et andet forslag?
Avatar billede lrj Nybegynder
16. april 1999 - 12:20 #1
Du kunne sætte den til now - så har den da en værdi der giver mening...

Men hvorfor vil du initialisere den - det er bare et kommatal...
Avatar billede rdj Nybegynder
16. april 1999 - 12:30 #2
Tdatetime er ikke et kommatal, det er en double, dvs. et tal.

Normalt sætter man den til -1, datoen giver 1889-12-31
Avatar billede lrj Nybegynder
16. april 1999 - 12:38 #3
Hmm, undskyld min formulering, men kommatal og double er desværre det samme i min terminologi - er flydende tal en bedre formulering?

Det oprindelige spørgsmål er, om man kan sætte en TDateTime til en værdi som ikke kan opfattes som en dato - og her må svaret være nej. Men ved f.eks. at sætte den til en værdi som -1, som rdj har forslået, så er det nemmere i sit program at checke om den ikke er "initialiseret" (-1) og reagere på det. I det lys er mit forslag med now ret fjollet... :-)
Avatar billede lange Nybegynder
16. april 1999 - 12:40 #4
TDateTime er en double - altså et kommatal. Heltalsdelen angiver antallet af dage siden 30/12-1899, og decimal-værdien angiver en del af døgnets 24 timer. Sættes en TDateTime-variabel til -1.25, svarer det til 29/12/1899 klokken 06:00.

Men jeg kan heller ikke umiddelbart se nogen grund til at initialisere en TDateTime-variabel?
Avatar billede lrj Nybegynder
18. april 1999 - 23:49 #5
Hmm, jeg tror det er på tide at afvise eller acceptere svaret - så må du jo lige finde ud af hvem som skal have de points - spørgsmålet må siges at være dødt.

/Lrj
Avatar billede ripley Nybegynder
19. april 1999 - 09:40 #6
Det giver ikke meget mening at sætte den til now - så hellere -1. Derfor afviser jeg svaret!
Mht. at initialisere den, så må jeg jo hellere kravle op på barrikaderne og forsvare mig: Jeg synes, det virker pænest at initialisere alle attributter i constructoren, så man er sikker på, hvad de er sat til.
Avatar billede ripley Nybegynder
19. april 1999 - 09:41 #7
Så svar lige igen, rdj - så accepterer jeg dit svar! :-)
Avatar billede rdj Nybegynder
19. april 1999 - 11:48 #8
Ok
Avatar billede ripley Nybegynder
19. april 1999 - 23:18 #9
Ha! Nej jeg gør ej - undskyld, men jeg bliver altså nødt til at vende på en tallerken - og du bliver nødt til at komme med noget bedre. At sætte en TDateTime til -1 giver en bestemt dato - og det virker stadig forkert. Om det så er en dato tilbage til yngre stenalder, duer det stadig ikke. Jeg vil enten have et konkret og dokumenteret udsagn om, at det ikke kan lade sig gøre eller noget, der giver det samme som nil ved andre typer.

Det skal nok lykkes mig at ruske godt op i denne Delphi-kategori!!! ;-)
Avatar billede lange Nybegynder
20. april 1999 - 01:09 #10
Det kan ikke lade sig gøre at initialisere en TDateTime.

En TDateTime er ikke et objekt, hvorfor det ikke kan sættes nil. Det betyder også, at alle værdier en TDateTime kan sættes til, repræsenterer en dato.

Ligesom man ikke kan initialisere en Double til en værdi, der ikke er et tal, kan man ikke initialisere en TDateTime til en værdi, der ikke er en dato.
Avatar billede ripley Nybegynder
20. april 1999 - 22:38 #11
Okay - så kan vi vist endelig få lukket dette spørgsmål.
Tak for svaret - det virker logisk og rigtigt! :-)
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