@@ -596,31 +596,10 @@ function UnixFileTimeToDateTime(UnixTime: TUnixFileTime) : TDateTime;
596596function DateTimeToUnixFileTime (DateTime : TDateTime): TUnixFileTime;
597597{ $IF DEFINED(UNIX)}
598598var
599- AUnixTime: TTime;
600- ATime: TTimeStruct;
601- Year, Month, Day: Word;
602- Hour, Minute, Second, MilliSecond: Word;
599+ AUnixTime: TFileTimeEx;
603600begin
604- DecodeDate(DateTime, Year, Month, Day);
605- DecodeTime(DateTime, Hour, Minute, Second, MilliSecond);
606-
607- ATime.tm_isdst:= -1 ;
608-
609- ATime.tm_year:= Year - 1900 ;
610- ATime.tm_mon:= Month - 1 ;
611- ATime.tm_mday:= Day;
612-
613- ATime.tm_hour:= Hour;
614- ATime.tm_min:= Minute;
615- ATime.tm_sec:= Second;
616-
617- AUnixTime:= fpMkTime(@ATime);
618-
619- if (AUnixTime = -1 ) then
620- Result:= 0
621- else begin
622- Result:= TUnixFileTime(AUnixTime);
623- end ;
601+ AUnixTime:= DateTimeToUnixFileTimeEx(DateTime);
602+ Result:= TUnixFileTime(AUnixTime.Sec);
624603end ;
625604{ $ELSE}
626605var
@@ -639,9 +618,6 @@ function DateTimeToUnixFileTimeEx(DateTime : TDateTime): DCBasicTypes.TFileTimeE
639618 Year, Month, Day: Word;
640619 Hour, Minute, Second, MilliSecond: Word;
641620begin
642- if DateTime < UnixEpoch then
643- raise EDateOutOfRange.Create(DateTime);
644-
645621 DecodeDate(DateTime, Year, Month, Day);
646622 DecodeTime(DateTime, Hour, Minute, Second, MilliSecond);
647623
@@ -660,6 +636,7 @@ function DateTimeToUnixFileTimeEx(DateTime : TDateTime): DCBasicTypes.TFileTimeE
660636 if (AUnixTime = -1 ) then
661637 Result:= TFileTimeExNull
662638 else begin
639+ if (AUnixTime < 0 ) then MilliSecond:= 0 ;
663640 Result:= TFileTimeEx.Create(AUnixTime, MilliSecond * 1000 * 1000 );
664641 end ;
665642end ;
0 commit comments