Ver Fonte

* Added UniversalTimeToLocal LocalTimeToUniversal as per bug #17435

git-svn-id: trunk@21866 -
michael há 13 anos atrás
pai
commit
597483610b
1 ficheiros alterados com 47 adições e 0 exclusões
  1. 47 0
      rtl/objpas/dateutil.inc

+ 47 - 0
rtl/objpas/dateutil.inc

@@ -423,6 +423,14 @@ Function MacTimeStampToUnix(const AValue: Int64): Int64;
 Function DateTimeToDosDateTime(const AValue: TDateTime): longint;
 Function DosDateTimeToDateTime( AValue: longint): TDateTime;
 
+{ UTC <-> Local time }
+
+Function UniversalTimeToLocal(UT: TDateTime): TDateTime;
+Function UniversalTimeToLocal(UT: TDateTime; TZOffset : Integer): TDateTime;
+Function LocalTimeToUniversal(LT: TDateTime): TDateTime;
+Function LocalTimeToUniversal(LT: TDateTime; TZOffset: Integer): TDateTime;
+
+
 { ScanDateTime is a limited inverse of formatdatetime }
 function ScanDateTime(const Pattern:string;const s:string;const fmt:TFormatSettings;startpos:integer=1) : tdatetime; overload;
 function ScanDateTime(const Pattern:string;const s:string;startpos:integer=1) : tdatetime; overload;
@@ -2446,6 +2454,45 @@ begin
  result:=scandatetime(pattern,s,defaultformatsettings);
 end;
 
+{ Conversion of UTC to local time and vice versa }
+
+
+function UniversalTimeToLocal(UT: TDateTime): TDateTime;
+
+begin
+  Result:=UniversalTimeToLocal(UT,GetLocalTimeOffset);
+end;
+
+function UniversalTimeToLocal(UT: TDateTime; TZOffset : Integer): TDateTime;
+
+begin
+  Result := UT;
+  if (TZOffset > 0) then
+    Result := UT - EncodeTime(TZOffset div 60, TZOffset mod 60, 0, 0)
+  else if (TZOffset = 0) then
+    Result := UT
+  else if (TZOffset < 0) then
+    Result := UT + EncodeTime(Abs(TZOffset) div 60, Abs(TZOffset) mod 60, 0, 0);
+end;
+ 
+Function LocalTimeToUniversal(LT: TDateTime): TDateTime;
+
+begin
+  Result:=LocalTimeToUniversal(LT,GetLocalTimeOffset);
+end;
+
+Function LocalTimeToUniversal(LT: TDateTime;TZOffset: Integer): TDateTime;
+
+begin
+  Result := LT;
+  if (TZOffset > 0) then
+    Result := LT + EncodeTime(TZOffset div 60, TZOffset mod 60, 0, 0)
+  else if (TZOffset = 0) then
+    Result := LT
+  else if (TZOffset < 0) then
+    Result := LT - EncodeTime(Abs(TZOffset) div 60, Abs(TZOffset) mod 60, 0, 0);
+end;
+
 {$else}
 implementation
 {$endif FPUNONE}