+ Several dateutil-fixes for dates before 1899/12/30

git-svn-id: trunk@3687 -
This commit is contained in:
joost 2006-05-26 20:55:03 +00:00
parent e192729213
commit 35c5b75792

View File

@ -43,6 +43,13 @@ begin
Result:=0;
end;
function ComposeDateTime(Date,Time : TDateTime) : TDateTime;
begin
if Date < 0 then Result := Date - Time
else Result := Date + Time;
end;
{==============================================================================}
{ Public functions }
{==============================================================================}
@ -59,8 +66,8 @@ end ;
function TimeStampToDateTime(const TimeStamp: TTimeStamp): TDateTime;
begin
result := (TimeStamp.Date - DateDelta) + (TimeStamp.Time / MSecsPerDay);
end ;
Result := ComposeDateTime(TimeStamp.Date - DateDelta,TimeStamp.Time / MSecsPerDay)
end;
{ MSecsToTimeStamp }
@ -210,8 +217,8 @@ end ;
function SystemTimeToDateTime(const SystemTime: TSystemTime): TDateTime;
begin
result := DoEncodeDate(SystemTime.Year, SystemTime.Month, SystemTime.Day) +
DoEncodeTime(SystemTime.Hour, SystemTime.Minute, SystemTime.Second, SystemTime.MilliSecond);
result := ComposeDateTime(DoEncodeDate(SystemTime.Year, SystemTime.Month, SystemTime.Day),
DoEncodeTime(SystemTime.Hour, SystemTime.Minute, SystemTime.Second, SystemTime.MilliSecond));
end ;
{ DayOfWeek returns the Day of the week (sunday is day 1) }
@ -481,7 +488,7 @@ function StrToDateTime(const s: string): TDateTime;
var i: integer;
begin
i := pos(' ', s);
if i > 0 then result := StrToDate(Copy(S, 1, i - 1)) + StrToTime(Copy(S, i + 1, length(S)))
if i > 0 then result := ComposeDateTime(StrToDate(Copy(S, 1, i - 1)), StrToTime(Copy(S, i + 1, length(S))))
else result := StrToDate(S);
end ;
@ -697,9 +704,8 @@ var
end ;
begin
DecodeDate(DateTime, Year, Month, Day);
DecodeDateFully(DateTime, Year, Month, Day, DayOfWeek);
DecodeTime(DateTime, Hour, Minute, Second, MilliSecond);
DayOfWeek := SysUtils.DayOfWeek(DateTime);
ResultLen := 0;
ResultCurrent := @ResultBuffer;
StoreFormat(FormatStr);
@ -721,17 +727,16 @@ Var YY,MM,DD,H,m,s,msec : Word;
begin
Decodedate (DateTime,YY,MM,DD);
DecodeTime (DateTime,h,m,s,msec);
{$ifndef unix}
If (YY<1980) or (YY>2099) then
Result:=0
else
begin
DecodeTime (DateTime,h,m,s,msec);
Result:=(s shr 1) or (m shl 5) or (h shl 11);
Result:=Result or DD shl 16 or (MM shl 21) or ((YY-1980) shl 25);
end;
{$else unix}
Decodetime(DateTime,h,m,s,msec);
Result:=LocalToEpoch(yy,mm,dd,h,m,s);
{$endif unix}
end;
@ -751,15 +756,15 @@ Var Date,Time : Word;
begin
Date:=FileDate shr 16;
Time:=FileDate and $ffff;
Result:=EncodeDate((Date shr 9) + 1980,(Date shr 5) and 15, Date and 31) +
EncodeTime(Time shr 11, (Time shr 5) and 63, (Time and 31) shl 1,0);
Result:=ComposeDate(EncodeDate((Date shr 9) + 1980,(Date shr 5) and 15, Date and 31),
EncodeTime(Time shr 11, (Time shr 5) and 63, (Time and 31) shl 1,0));
end;
{$else unix}
var
y, mon, d, h, min, s: word;
begin
EpochToLocal(FileDate,y,mon,d,h,min,s);
Result:=EncodeDate(y,mon,d) + EncodeTime(h,min,s,0);
Result:=ComposeDateTime(EncodeDate(y,mon,d),EncodeTime(h,min,s,0));
end;
{$endif unix}