Michael Van Canneyt wrote / napísal(a):
On Wed, 11 Jul 2012, LacaK wrote:
Hi *,
I noticed, that there was just added new functions for supporting TZ
in rev. 21865 and 21866
Now function GetLocalTimeOffset: Integer returns offset *in minutes*
and later in functions LocalTimeToUniversal and UniversalTimeToLocal
are used commands to transform it to TDateTime using EncodeTime.
(f.e. EncodeTime(TZOffset div 60, TZOffset mod 60, 0, 0))
My idea is change function GetLocalTimeOffset: TDateTime to return
TDateTime (offset in fraction of days - native FPC datetime format)
i.e. current implementation + "Result := Result / MinsPerDay"
I think, that it will be useful, because in real applications we will
need on each usage transform minutes to use it in Datetime calculations.
(LocalDateTime := UTCDateTime - GetLocalTimeOffset;)
Then functions LocalTimeToUniversal and UniversalTimeToLocal will be
simple addition or subtraction like:
function UniversalTimeToLocal(UT: TDateTime; TZOffset : TDateTime):
TDateTime;
begin
Result := UT - TZOffset;
end;
What do you think? It will simplify all.
There are 2 sides to this medal. The function returns a number of
timezones;
This is usually expressed as a number of hours and minutes (the OS
returns it so). The result is in 'natural' units.
AFAIK f.e. GetTimeZoneInformation under Windows return bias in minutes
Returning it as a timestamp - while useful by itself - seems rather odd.
May be, that I expressed it wrong
My proposal is like:
Windows:
function GetLocalTimeOffset: double; <--
591
592 var
593 TZInfo: TTimeZoneInformation;
594
595 begin
596 case GetTimeZoneInformation(TZInfo) of
597 TIME_ZONE_ID_UNKNOWN:
598 Result := TZInfo.Bias;
599 TIME_ZONE_ID_STANDARD:
600 Result := TZInfo.Bias + TZInfo.StandardBias;
601 TIME_ZONE_ID_DAYLIGHT:
602 Result := TZInfo.Bias + TZInfo.DaylightBias;
603 else
604 Result := 0;
605 end;
+ Result := Result / MinsPerDay;
606 end;
Unix:
function GetLocalTimeOffset: double; <--
1405
1406 begin
+ Result := -Tzseconds / SecsPerDay;
1408 end;
dateutil.inc:
function UniversalTimeToLocal(UT: TDateTime; TZOffset : double): TDateTime;
2467
2468 begin
Result := UT - TZOffset;
2476 end;
Function LocalTimeToUniversal(LT: TDateTime;TZOffset: double): TDateTime;
2485
2486 begin
Result := LT + TZOffset;
2494 end;
if TZOffset will be "day fraction" then we can simplyfy above mentioned
functions, or am I wrong ?
Thanks
-Laco.
_______________________________________________
fpc-devel maillist - fpc-devel@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel