From 767e3fee62f22aef4ea6a38630b58d549324b82d Mon Sep 17 00:00:00 2001 From: michael Date: Thu, 5 Jun 2008 07:06:47 +0000 Subject: [PATCH] * Patch from Joao Morais to fix the case where only a time is provided git-svn-id: trunk@11199 - --- rtl/objpas/sysutils/dati.inc | 32 +++++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/rtl/objpas/sysutils/dati.inc b/rtl/objpas/sysutils/dati.inc index 40b0584aa5..1ce15b3b9a 100644 --- a/rtl/objpas/sysutils/dati.inc +++ b/rtl/objpas/sysutils/dati.inc @@ -516,15 +516,37 @@ begin end ; { StrToDateTime converts the string S to a TDateTime value - if S does not represent a valid date and time value + if S does not represent a valid date and/or time value an EConvertError will be raised } function StrToDateTime(const s: string): TDateTime; -var i: integer; +var + i, j, k, l: integer; + sd, st: string; begin -i := pos(' ', s); -if i > 0 then result := ComposeDateTime(StrToDate(Copy(S, 1, i - 1)), StrToTime(Copy(S, i + 1, length(S)))) -else result := StrToDate(S); + l := Length(s); + i := 1; + while (i <= l) and (s[i] = ' ') do + Inc(i); + j := i; + while (j <= l) and (s[j] <> ' ') do + Inc(j); + k := j; + while (k <= l) and (s[k] = ' ') do + Inc(k); + sd := Copy(s, i, j - i); + st := Copy(s, k, l); + if (st = '') and (Pos(TimeSeparator, sd) > 0) then + begin + st := sd; + sd := ''; + end; + if (sd <> '') and (st <> '') then + Result := ComposeDateTime(StrToDate(sd), StrToTime(st)) + else if st = '' then + Result := StrToDate(sd) + else + Result := StrToTime(st); end ; { FormatDateTime formats DateTime to the given format string FormatStr }