summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--rtl/objpas/sysutils/dati.inc12
-rw-r--r--tests/webtbs/tw38631.pp23
2 files changed, 30 insertions, 5 deletions
diff --git a/rtl/objpas/sysutils/dati.inc b/rtl/objpas/sysutils/dati.inc
index 19848e57bf..667d7c1360 100644
--- a/rtl/objpas/sysutils/dati.inc
+++ b/rtl/objpas/sysutils/dati.inc
@@ -75,18 +75,20 @@ end;
{ MSecsToTimeStamp }
function MSecsToTimeStamp(MSecs: comp): TTimeStamp;
+var
+ D1:Int64;
begin
- result.Date := Trunc(msecs / msecsperday);
- msecs:= msecs-comp(result.date)*msecsperday;
- result.Time := Round(MSecs);
-end ;
+ D1:=Trunc(msecs);
+ result.Date := D1 div msecsperday;
+ result.Time := D1 - result.date * msecsperday;
+end;
{ TimeStampToMSecs }
function TimeStampToMSecs(const TimeStamp: TTimeStamp): comp;
begin
result := TimeStamp.Time + comp(timestamp.date)*msecsperday;
-end ;
+end;
Function TryEncodeDate(Year,Month,Day : Word; Out Date : TDateTime) : Boolean;
diff --git a/tests/webtbs/tw38631.pp b/tests/webtbs/tw38631.pp
new file mode 100644
index 0000000000..76448e4516
--- /dev/null
+++ b/tests/webtbs/tw38631.pp
@@ -0,0 +1,23 @@
+{$mode objfpc}
+program msec_test1;
+uses sysutils;
+
+var
+ D: TDateTime;
+ T, T1, T2: TTimeStamp;
+ MS: Comp;
+begin
+ D:=EncodeDate(2021, 03, 16) + EncodeTime(14, 02, 15, 1);
+ WriteLn('DATE: ', DateTimeToStr(D));
+
+ T:=DateTimeToTimeStamp(D);
+ WriteLn(' T.Date=',T.Date,' T.Time=', T.Time);
+ MS:=TimeStampToMSecs(T);
+ T1:=MSecsToTimeStamp(MS);
+ WriteLn('T1.Date=',T1.Date,' T1.Time=', T1.Time);
+
+ WriteLn('DATE1: ', DateTimeToStr(TimeStampToDateTime(T1)));
+ if TimeStampToDateTime(T1)<>D then
+ halt(1);
+ writeln('ok')
+end.