瀏覽代碼

* fixed MSecsToTimeStamp by Lagunov Aleksey, resolves #38631

git-svn-id: trunk@49247 -
florian 4 年之前
父節點
當前提交
dbee3bcc0d
共有 3 個文件被更改,包括 31 次插入5 次删除
  1. 1 0
      .gitattributes
  2. 7 5
      rtl/objpas/sysutils/dati.inc
  3. 23 0
      tests/webtbs/tw38631.pp

+ 1 - 0
.gitattributes

@@ -18820,6 +18820,7 @@ tests/webtbs/tw38549c.pp svneol=native#text/plain
 tests/webtbs/tw38549d.pp svneol=native#text/plain
 tests/webtbs/tw38557.pp svneol=native#text/pascal
 tests/webtbs/tw3863.pp svneol=native#text/plain
+tests/webtbs/tw38631.pp svneol=native#text/pascal
 tests/webtbs/tw38636.pp svneol=native#text/plain
 tests/webtbs/tw3864.pp svneol=native#text/plain
 tests/webtbs/tw38642.pp svneol=native#text/pascal

+ 7 - 5
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;
 

+ 23 - 0
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.