Avatar billede koonz Nybegynder
22. januar 2000 - 13:43 Der er 13 kommentarer og
1 løsning

StrtoTime

Hvorfor giver følgende Time=0

Var
Time : TDateTime

Begin
Time := StrToTime('10:00');
end;
Avatar billede sjensen Nybegynder
22. januar 2000 - 14:04 #1
brug i stedet:

var time : TTime; så virker det.

sjensen
Avatar billede sjensen Nybegynder
22. januar 2000 - 14:05 #2
Hvis du vil bruge en TDateTime så sæt

Time := date + strtotime('10:00');

så virker det også
Avatar billede snorga Nybegynder
22. januar 2000 - 17:04 #3
>>sjensen, en TTime ER en TDateTime.

Nu har jeg ikke lige delphi her, men bliver Time så ikke noget i stilen med 0.21 (alså et komma tal)

TTime er antallet af dage siden en bestemt dato( jeg mener det er ca 1/1-1900). Prøv at kikke i hjælpe filen under TDateTime. Prøv at kikke om der ikke er en funktion der decodetime/incodetime.
Avatar billede sjensen Nybegynder
22. januar 2000 - 18:45 #4
Snorga,

Fordi Time er en DateTime skal koonz enten bruge StrtoDateTime for at få det til at virke, eller lade Time være en TTime. Og eftersom det kun er tidspunktet koonz sætter vil det være mere naturligt at bruge en TTime.

Jo, Date, Time og DateTime er altid et decimaltal, nemlig antallet af dage, timer, minutter, sekunder og millesekundr siden d. 30.12.1899, med dage som hele tal og timer, minuttere og sekunder som decimalerne.

Og du behøver ikke decode-/encodetime. StrtoTime/StrtoDate/StrtoDatetime er decode og omvendt er det encode.

Når man sætter en datetime = kl. 10.00 er det altså kl. 10.00 d. 30.12.1899 og det er ganske rigtigt et kommatal med 0,etellerandet.

Så det koonz skal gøre er at bruge time enten med timetostr(time) eller proppe det ind i en double og så kigge på decimalerne.


MEN, MEN, MEN der er et helt andet problem vi begge lige har overset:

Date, Time og Now er interne Delphi værdier man kan bruge til f.eks.:

..Caption := 'Kl. er nu '+timetostr(time); eller
..Caption := *Det er idag d. '+datostr(date);

og endeligt

..caption := *Dato og klokkeslet er: '+datetimetostr(now);

Så Koonz: Du skal kalde din var noget andet end time, fordi time er en indbygget variabel der altid viser den nuværende tid.
Avatar billede koonz Nybegynder
22. januar 2000 - 19:16 #5
Kay SJensen jeg skal lige afprøve, jeg trode delphi gav en fejl af en eller anden slag hvis jeg brugte et "resevret" ord, men jeg kan godt se problemet
Avatar billede koonz Nybegynder
22. januar 2000 - 19:24 #6
Jeg har prøvet følgende

Var
ActualTime: TTime;

Begin
ActualTime := StrToTime('10:00');
end;

Samme resultat !

ActualTime = 0
Hvis jeg kører cursor over i "debug"

Kan det have noget med at det er et komma tal, som snorga er inde på, at jeg skal fortælle det, men hvordan laver jeg så en sammen ligning med (now) ?
Avatar billede sjensen Nybegynder
23. januar 2000 - 00:25 #7
Actualtime : Ttime er det samme som

Actualtime : double

Så hvis du skal vise værdien skal du bruge

text := floattostr(actualtime);

Sammenling med Now på den måde som jeg viste først:

Sæt actualtime := date + strtotime('10:00');

Fordi now er en TDateTime der indeholder både dato og tid, og du kun sætter actualtime til tiden, vil datoen være 30.12.1899 og klokkeslettet 10.00

Hvis du skal teste actualtime mod now er du nødt til at sikre at actualtime også indeholder den korrekte dato.

Hvis du sætter actualtime := 0; så vil text := datetimetostr(actualtime); vise 30-12-1899 00:00

Kan du se hvad jeg mener ?

sjensen
Avatar billede snorga Nybegynder
23. januar 2000 - 13:27 #8
Der er ingen grund til at ligge date til
(
Sæt actualtime := date + strtotime('10:00');
)
hvis du sammenligner med TIME i stedet for NOW

Hvis du vil lave en sammenligning kan du vist bruge:
If TIME >= strtotime('10:00') then ...
Avatar billede snorga Nybegynder
23. januar 2000 - 13:31 #9
Men hensyn til variablen time, så tager delphi den sidst oprettede variable. DVS her vil problemmet værer at du ikke kan bruge DELPHI's time funktion.

(dvs det kan du godt:
den kan tilgåes med sysutils.time. (hvis den da ligger i sysutils unit'et)
)
Avatar billede koonz Nybegynder
23. januar 2000 - 16:05 #10
Koden ser ud som følgende

procedure TfrmMain.pAutomail;
var
DayOfMonth,Tempstring, Nowtime: string;
SPos : Integer;

begin
  TempString := DateToStr(now);
  DayOfMonth := Copy(TempString,1,2); {dag i måned hentes}
  NowTime := TimeToStr(Now);
  if (chkMonth.Checked = True) and
    (strToInt(cmbMonthDay.Text) = StrToInt(DayOfMonth)) then
  Begin
    if (StrToTime(edtMonthTime.Text) > StrToTime(NowTime)) and
        (vMonthSent = false) then
        begin
          vMonthSent := True;
        end;
  end
  else vMonthSent := False;
end;

Problemet opstår i at Konveteringen StrToTime(edtMonthTime.Text) altid bliver 0 måske også StrToTime(NowTime)
Avatar billede hlj Nybegynder
23. januar 2000 - 16:34 #11
For det første ville jeg bruge DecodeDate proceduren til at finde månedes nummeret, da den nok er mere sikker.

Så ser det ud til at dit dato format er sat op til amerikansk (mmddyy) i forhold til den danske (europæiske) (ddmmyy), siden du henter de to første karakterer som måneds nr.

Hvis man forsøger at lave en konvertering af et forkert format vil der opstå en exception. Du har måske en try - except der fanger den fejl?

Hjælper det at indføje følgende linie i starten af din function:
ShortTimeFormat := 'hh:mm';
så du tvinger Delphi til at bruge det format.

Hvis jeg prøver den kode du vise i dit spørgsmål virker det udemærket.

Hvis man laver programmer der kan/skal køre på windows platforme der bruger en anden dato og tids format end her i Danmark, risikerer man at løbe ind i problemmer hvis man bruger tidskonverteringroutiner til/fra string.



Avatar billede koonz Nybegynder
23. januar 2000 - 18:44 #12
Hlj ->
Tak for hjælpen, du gav lige de vise sten ;)

Det er nu dagen i måneden jeg piller ud, men jeg kan godt se ideen med at bruge decode, selvom programmet "kun" skal køre på danske maskiner, kan datoen jo godt være sat op til engelsk.
Jeg viste ikke en sådan procedure fantes, men man skal jo lære så længe...

Du får points - det må være OK, eftersom det var dig der gav det sidste skub, men også tak til Jensen og Snorga fo hjælpen
Avatar billede snorga Nybegynder
23. januar 2000 - 21:53 #13
Det var så lidt :)
Avatar billede hlj Nybegynder
23. januar 2000 - 22:04 #14
Jeg takker også og du har ret i, at jeg i farten overså at det jo egentlig er dagen i måneden du skal bruge.
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