Ver Fonte

* Improved timezone support in line with FPC

Michaël Van Canneyt há 3 anos atrás
pai
commit
5297f0cf73
1 ficheiros alterados com 31 adições e 3 exclusões
  1. 31 3
      packages/rtl/sysutils.pas

+ 31 - 3
packages/rtl/sysutils.pas

@@ -480,7 +480,7 @@ Var
 
 // Various conversions
 
-function DateTimeToJSDate(aDateTime : TDateTime) : TJSDate;
+function DateTimeToJSDate(aDateTime : TDateTime; asUTC : Boolean = False) : TJSDate;
 function JSDateToDateTime(aDate : TJSDate) : TDateTime;
 function DateTimeToTimeStamp(DateTime: TDateTime): TTimeStamp;
 function TimeStampToDateTime(const TimeStamp: TTimeStamp): TDateTime;
@@ -553,6 +553,12 @@ function StrToDateTimeDef(const S: String; const Defvalue : TDateTime; aSettings
 function FormatDateTime(const FormatStr: string; const DateTime: TDateTime): string; overload;
 function FormatDateTime(const FormatStr: string; const DateTime: TDateTime; const aSettings: TFormatSettings): string; overload;
 
+// Local time
+
+function GetLocalTimeOffset: Integer; overload;
+function GetLocalTimeOffset(const DateTime: TDateTime; const InputIsUTC: Boolean; out Offset: Integer): Boolean; overload;
+function GetLocalTimeOffset(const DateTime: TDateTime; const InputIsUTC: Boolean = False): Integer; overload;
+
 
 { *****************************************************************************
   Currency support
@@ -3228,7 +3234,7 @@ begin
     Result:=0;
 end;
 
-function DateTimeToJSDate(aDateTime: TDateTime): TJSDate;
+function DateTimeToJSDate(aDateTime: TDateTime; asUTC : Boolean = False): TJSDate;
 
 Var
   Y,M,D,h,n,s,z : Word;
@@ -3236,7 +3242,10 @@ Var
 begin
   DecodeDate(Trunc(aDateTime),Y,M,D);
   DecodeTime(Frac(aDateTime),H,N,S,Z);
-  Result:=TJSDate.New(Y,M-1,D,h,n,s,z);
+  if asUTC then
+    Result:=TJSDate.New(TJSDate.UTC(Y,M-1,D,h,n,s,z))
+  else
+    Result:=TJSDate.New(Y,M-1,D,h,n,s,z);
 end;
 
 function JSDateToDateTime(aDate: TJSDate): TDateTime;
@@ -8805,6 +8814,25 @@ begin
   System.Insert(New,FData,Index+1);
 end;
 
+Function GetLocalTimeOffset : Integer;
+
+begin
+  Result:=TJSDate.New.getTimezoneOffset;
+end;
+
+function GetLocalTimeOffset(const DateTime: TDateTime; const InputIsUTC: Boolean; out Offset: Integer): Boolean;
+begin
+  offset:=DateTimeToJSDate(DateTime).getTimezoneOffset;
+  Result:=True;
+end;
+
+function GetLocalTimeOffset(const DateTime: TDateTime; const InputIsUTC: Boolean): Integer;
+begin
+  if not GetLocalTimeOffset(DateTime, InputIsUTC, Result) then
+    Result:=GetLocalTimeOffset();
+end;
+
+
 initialization
   ShortMonthNames:=DefaultShortMonthNames;
   LongMonthNames:=DefaultLongMonthNames;