|
@@ -24,41 +24,33 @@ interface
|
|
|
|
|
|
Uses
|
|
|
{$IFnDEF FPC}
|
|
|
- Windows,
|
|
|
+ System.DateUtils,
|
|
|
{$ELSE}
|
|
|
{LCLIntf, LCLType, LMessages,}
|
|
|
{$ENDIF}
|
|
|
SysUtils;
|
|
|
|
|
|
-{$IFnDEF FPC}
|
|
|
-function TzSpecificLocalTimeToSystemTime(lpTimeZoneInformation: PTimeZoneInformation; var lpLocalTime, lpUniversalTime: TSystemTime): BOOL; stdcall;
|
|
|
-function SystemTimeToTzSpecificLocalTime(lpTimeZoneInformation: PTimeZoneInformation; var lpUniversalTime,lpLocalTime: TSystemTime): BOOL; stdcall;
|
|
|
-{$ENDIF}
|
|
|
-
|
|
|
Function DateTime2UnivDateTime(d:TDateTime):TDateTime;
|
|
|
Function UnivDateTime2LocalDateTime(d:TDateTime):TDateTime;
|
|
|
|
|
|
function UnivDateTimeToUnix(dtDate: TDateTime): Longint;
|
|
|
function UnixToUnivDateTime(USec: Longint): TDateTime;
|
|
|
|
|
|
-function UnixTimeToLocalElapsedTime(USec : Longint) : AnsiString;
|
|
|
-Function DateTimeElapsedTime(dtDate : TDateTime) : AnsiString;
|
|
|
+function UnixTimeToLocalElapsedTime(USec : Longint) : String;
|
|
|
+Function DateTimeElapsedTime(dtDate : TDateTime) : String;
|
|
|
|
|
|
-Function UnixTimeToLocalStr(UnixTime : Longint) : AnsiString;
|
|
|
+Function UnixTimeToLocalStr(UnixTime : Longint) : String;
|
|
|
|
|
|
implementation
|
|
|
|
|
|
{$IFDEF FPC}
|
|
|
Uses DateUtils;
|
|
|
-{$ELSE}
|
|
|
-function TzSpecificLocalTimeToSystemTime; external 'kernel32.dll' name 'TzSpecificLocalTimeToSystemTime';
|
|
|
-function SystemTimeToTzSpecificLocalTime; external kernel32 name 'SystemTimeToTzSpecificLocalTime';
|
|
|
{$ENDIF}
|
|
|
|
|
|
const
|
|
|
UnixStartDate: TDateTime = 25569.0; // 01/01/1970
|
|
|
|
|
|
-function UnixTimeToLocalElapsedTime(USec : Longint) : AnsiString;
|
|
|
+function UnixTimeToLocalElapsedTime(USec : Longint) : String;
|
|
|
Var diff, positivediff : Longint;
|
|
|
Begin
|
|
|
diff := UnivDateTimeToUnix(DateTime2UnivDateTime(now)) - Usec;
|
|
@@ -72,7 +64,7 @@ Begin
|
|
|
else Result := inttostr(diff DIV (60*60*24))+' days ago';
|
|
|
End;
|
|
|
|
|
|
-Function DateTimeElapsedTime(dtDate : TDateTime) : AnsiString;
|
|
|
+Function DateTimeElapsedTime(dtDate : TDateTime) : String;
|
|
|
Begin
|
|
|
Result := UnixTimeToLocalElapsedTime( UnivDateTimeToUnix(DateTime2UnivDateTime(dtDate)) );
|
|
|
End;
|
|
@@ -83,14 +75,8 @@ begin
|
|
|
Result := LocalTimeToUniversal(d,-GetLocalTimeOffset);
|
|
|
end;
|
|
|
{$ELSE}
|
|
|
-var
|
|
|
- TZI:TTimeZoneInformation;
|
|
|
- LocalTime, UniversalTime:TSystemTime;
|
|
|
begin
|
|
|
- GetTimeZoneInformation(tzi);
|
|
|
- DateTimeToSystemTime(d,LocalTime);
|
|
|
- TzSpecificLocalTimeToSystemTime(@tzi,LocalTime,UniversalTime);
|
|
|
- Result := SystemTimeToDateTime(UniversalTime);
|
|
|
+ Result := TTimeZone.Local.ToUniversalTime(d);
|
|
|
end;
|
|
|
{$ENDIF}
|
|
|
|
|
@@ -99,16 +85,9 @@ Function UnivDateTime2LocalDateTime(d:TDateTime):TDateTime;
|
|
|
begin
|
|
|
Result := UniversalTimeToLocal(d,-GetLocalTimeOffset);
|
|
|
end;
|
|
|
-
|
|
|
{$ELSE}
|
|
|
-var
|
|
|
- TZI:TTimeZoneInformation;
|
|
|
- LocalTime, UniversalTime:TSystemTime;
|
|
|
begin
|
|
|
- GetTimeZoneInformation(tzi);
|
|
|
- DateTimeToSystemTime(d,UniversalTime);
|
|
|
- SystemTimeToTzSpecificLocalTime(@tzi,UniversalTime,LocalTime);
|
|
|
- Result := SystemTimeToDateTime(LocalTime);
|
|
|
+ Result := TTimeZone.Local.ToLocalTime(d);
|
|
|
end;
|
|
|
{$ENDIF}
|
|
|
|
|
@@ -122,7 +101,7 @@ begin
|
|
|
Result := (Usec / 86400) + UnixStartDate;
|
|
|
end;
|
|
|
|
|
|
-Function UnixTimeToLocalStr(UnixTime : Longint) : AnsiString;
|
|
|
+Function UnixTimeToLocalStr(UnixTime : Longint) : String;
|
|
|
begin
|
|
|
Result := DateTimeToStr(UnivDateTime2LocalDateTime(UnixToUnivDateTime(UnixTime)))
|
|
|
end;
|