Browse Source

* introduce NowUTC() and GetUniversalTime()

git-svn-id: trunk@47306 -
(cherry picked from commit 934f2dc55da6dfe6c053b08ebf6a7ed8e9ab41c1)
ondrej 4 years ago
parent
commit
f6fdbf7041
5 changed files with 49 additions and 0 deletions
  1. 16 0
      rtl/objpas/sysutils/dati.inc
  2. 2 0
      rtl/objpas/sysutils/datih.inc
  3. 19 0
      rtl/unix/sysutils.pp
  4. 6 0
      rtl/win/sysutils.pp
  5. 6 0
      rtl/wince/sysutils.pp

+ 16 - 0
rtl/objpas/sysutils/dati.inc

@@ -273,6 +273,17 @@ begin
   result := systemTimeToDateTime(SystemTime);
 end;
 
+{   NowUTC returns the current UTC Date and Time if available on the OS. If not, local date is returned   }
+
+function NowUTC: TDateTime;
+var
+  SystemTime: TSystemTime;
+begin
+  if not GetUniversalTime(SystemTime) then
+    GetLocalTime(SystemTime);
+  result := systemTimeToDateTime(SystemTime);
+end;
+
 {   IncMonth increments DateTime with NumberOfMonths months,
     NumberOfMonths can be less than zero   }
 
@@ -1541,6 +1552,11 @@ function GetLocalTimeOffset(const DateTime: TDateTime; const InputIsUTC: Boolean
 begin
   Result:=False;
 end;
+
+function GetUniversalTime(var SystemTime: TSystemTime): Boolean;
+begin
+  Result:=False;
+end;
 {$ENDIF}
 
 function GetLocalTimeOffset(const DateTime: TDateTime; const InputIsUTC: Boolean): Integer;

+ 2 - 0
rtl/objpas/sysutils/datih.inc

@@ -128,6 +128,7 @@ function DayOfWeek(DateTime: TDateTime): integer;
 function Date: TDateTime;
 function Time: TDateTime;
 function Now: TDateTime;
+function NowUTC: TDateTime;
 function IncMonth(const DateTime: TDateTime; NumberOfMonths: integer = 1 ): TDateTime;
 procedure IncAMonth(var Year, Month, Day: Word; NumberOfMonths: Integer = 1);
 function IsLeapYear(Year: Word): boolean;
@@ -195,6 +196,7 @@ function StrToDateTimeDef(const S: AnsiString; const Defvalue : TDateTime; const
 function CurrentYear:Word;
 { FPC Extra }
 Procedure GetLocalTime(var SystemTime: TSystemTime);
+function GetUniversalTime(var SystemTime: TSystemTime): Boolean;
 
 procedure ReplaceTime(var dati:TDateTime; NewTime : TDateTime); inline;
 procedure ReplaceDate(var DateTime: TDateTime; const NewDate: TDateTime); inline;

+ 19 - 0
rtl/unix/sysutils.pp

@@ -1176,6 +1176,17 @@ begin
   GetEpochTime:=fptime;
 end;
 
+Procedure DoGetUniversalDateTime(var year, month, day, hour, min,  sec, msec, usec : word);
+
+var
+  tz:timeval;
+begin
+  fpgettimeofday(@tz,nil);
+  EpochToUniversal(tz.tv_sec,year,month,day,hour,min,sec);
+  msec:=tz.tv_usec div 1000;
+  usec:=tz.tv_usec mod 1000;
+end;
+
 // Now, adjusted to local time.
 
 Procedure DoGetLocalDateTime(var year, month, day, hour, min,  sec, msec, usec : word);
@@ -1614,6 +1625,14 @@ begin
   Flush(Output);
 end;
 
+function GetUniversalTime(var SystemTime: TSystemTime): Boolean;
+var
+  usecs : Word;
+begin
+  DoGetUniversalDateTime(SystemTime.Year, SystemTime.Month, SystemTime.Day,SystemTime.Hour, SystemTime.Minute, SystemTime.Second, SystemTime.MilliSecond, usecs);
+  Result:=True;
+end;
+
 function GetLocalTimeOffset: Integer;
 
 begin

+ 6 - 0
rtl/win/sysutils.pp

@@ -802,6 +802,12 @@ begin
   windows.Getlocaltime(SystemTime);
 end;
 
+function GetUniversalTime(var SystemTime: TSystemTime): Boolean;
+begin
+  windows.GetSystemTime(SystemTime);
+  Result:=True;
+end;
+
 function GetLocalTimeOffset: Integer;
 
 var

+ 6 - 0
rtl/wince/sysutils.pp

@@ -433,6 +433,12 @@ begin
   windows.Getlocaltime(SystemTime);
 end;
 
+function GetUniversalTime(var SystemTime: TSystemTime): Boolean;
+begin
+  windows.GetSystemTime(SystemTime);
+  Result:=True;
+end;
+
 function GetLocalTimeOffset: Integer;
 var
   TZInfo: TTimeZoneInformation;