From f5a95782a94e41a09184808b54f3857b9afe8b2e Mon Sep 17 00:00:00 2001 From: ondrej Date: Sun, 22 Nov 2020 15:39:37 +0000 Subject: [PATCH] * use timezone information from fpgettimeofday for getting local datetime git-svn-id: trunk@47527 - --- rtl/unix/dos.pp | 18 +++++++++++------- rtl/unix/sysutils.pp | 22 ++++++++++++---------- 2 files changed, 23 insertions(+), 17 deletions(-) diff --git a/rtl/unix/dos.pp b/rtl/unix/dos.pp index 14e1271c2d..a16da9a56e 100644 --- a/rtl/unix/dos.pp +++ b/rtl/unix/dos.pp @@ -144,11 +144,13 @@ end; Procedure GetDate(Var Year, Month, MDay, WDay: Word); var - tz:timeval; + tv:timeval; + tz:timezone; hour,min,sec : word; begin - fpgettimeofday(@tz,nil); - EpochToLocal(tz.tv_sec,year,month,mday,hour,min,sec); + fpgettimeofday(@tv,@tz); + tv.tv_sec:=tv.tv_sec-tz.tz_minuteswest*60; + EpochToUniversal(tv.tv_sec,year,month,mday,hour,min,sec); Wday:=weekday(Year,Month,MDay); end; @@ -189,12 +191,14 @@ end; Procedure GetTime(Var Hour, Minute, Second, Sec100: Word); var - tz:timeval; + tv:timeval; + tz:timezone; year,month,day : word; begin - fpgettimeofday(@tz,nil); - EpochToLocal(tz.tv_sec,year,month,day,hour,minute,second); - sec100:=tz.tv_usec div 10000; + fpgettimeofday(@tv,@tz); + tv.tv_sec:=tv.tv_sec-tz.tz_minuteswest*60; + EpochToUniversal(tv.tv_sec,year,month,day,hour,minute,second); + sec100:=tv.tv_usec div 10000; end; diff --git a/rtl/unix/sysutils.pp b/rtl/unix/sysutils.pp index 68520a7e99..ecefe73b18 100644 --- a/rtl/unix/sysutils.pp +++ b/rtl/unix/sysutils.pp @@ -1191,12 +1191,12 @@ end; Procedure DoGetUniversalDateTime(var year, month, day, hour, min, sec, msec, usec : word); var - tz:timeval; + tp: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; + fpgettimeofday(@tp,nil); + EpochToUniversal(tp.tv_sec,year,month,day,hour,min,sec); + msec:=tp.tv_usec div 1000; + usec:=tp.tv_usec mod 1000; end; // Now, adjusted to local time. @@ -1204,12 +1204,14 @@ end; Procedure DoGetLocalDateTime(var year, month, day, hour, min, sec, msec, usec : word); var - tz:timeval; + tv:timeval; + tz:timezone; begin - fpgettimeofday(@tz,nil); - EpochToLocal(tz.tv_sec,year,month,day,hour,min,sec); - msec:=tz.tv_usec div 1000; - usec:=tz.tv_usec mod 1000; + fpgettimeofday(@tv,@tz); + tv.tv_sec:=tv.tv_sec-tz.tz_minuteswest*60; + EpochToUniversal(tv.tv_sec,year,month,day,hour,min,sec); + msec:=tv.tv_usec div 1000; + usec:=tv.tv_usec mod 1000; end; procedure GetTime(var hour,min,sec,msec,usec:word);