Real programmers don't comment their code... it was hard to write, it should be hard to read!
oogjes open, snaveltjes dicht
Dan gaat het dus goed, zoals hij dat al zelf zegtDon Facundo schreef op woensdag 11 mei 2005 @ 09:29:
en als je er een dubble punt tussen zet?
En dat lijkt me een prima oplossing. Waarom denk je dat het niet optimaal is?
Eventueel zou je de globale variabele ShortTimeFormat nog kunnen zetten. Alleen pas je dan ook de manier aan hoe de tijd wordt afgedrukt.
Edit: encodetime pakt geen strings als params dus dat lijkt me niet bruikbaar
[ Voor 9% gewijzigd door Creepy op 11-05-2005 09:35 ]
"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney
Met EncodeTime zit er weer een extra omzettingen van string naar int's tussen waarbij je dus van te voren extra controles moet gaan doen terwijl StrToTime dit al voor je kan doen
"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney
Dit scheelt weer een omzetting van string naar int voor EncodeTime.
Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack
Verwijderd
Die dubbele punt ertussen zetten is ongeveer net zo zwaar als die 4 karakters opsplitsen naar 2 integers...Creepy schreef op woensdag 11 mei 2005 @ 09:50:
Dat kan door er een dubbele punt tussen zetten en de EConvert Exception af te vangen ook prima.
Met EncodeTime zit er weer een extra omzettingen van string naar int's tussen waarbij je dus van te voren extra controles moet gaan doen terwijl StrToTime dit al voor je kan doen
En bovendien komen StrToTime en EncodeTime uiteindelijk uit op dezelfde basisfunctie:
1
2
3
4
5
6
7
8
9
| function TryEncodeTime(Hour, Min, Sec, MSec: Word; out Time: TDateTime): Boolean; begin Result := False; if (Hour < 24) and (Min < 60) and (Sec < 60) and (MSec < 1000) then begin Time := (Hour * 3600000 + Min * 60000 + Sec * 1000 + MSec) / MSecsPerDay; Result := True; end; end; |
Alleen heeft StrToTime dan nog een aantal (in dit geval) onnodige checks, bv. of er misschien AM/PM in de string staat. Oftewel, EncodeTime is hier nog niet zo'n slechte keuze...
Maar als je het helemaal basaal wilt doen, is er nog een oplossing. Zoals bekend is tijd gewoon een gebroken getal waarbij de helen staan voor de dagen en het gedeelte achter de komma voor de tijd. De volgende functie zet op deze manier de string eenvoudig om naar een TDateTime.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| function MakeTime(TimeStr: string): TDateTime;
var
Hours, Minutes: byte;
Code: integer;
begin
if Length(TimeStr) <> 4
then
Result := 0
else
begin
Val(TimeStr[1] + TimeStr[2], Hours, Code);
if Code = 0
then
begin
Val(TimeStr[3] + TimeStr[4], Minutes, Code);
if Code = 0
then
Result := (Hours / 24) + (Minutes / (24 * 60))
else
Result := 0;
end
else
Result := 0;
end;
end; |