mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-20 19:29:26 +02:00
+ Several dateutil-fixes for dates before 1899/12/30
git-svn-id: trunk@3687 -
This commit is contained in:
parent
e192729213
commit
35c5b75792
@ -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}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user