Due to a FPC RTL bug, the Now(), Time() and possibly Date() functions return an incorrect time unless you're actually in GMT.
A possible fix:
var
TZOffsetFromGMT : Integer;
procedure TForm1.FormCreate(Sender: TObject);
begin
TZOffsetFromGMT := NSTimeZone.localTimeZone.secondsFromGMT;
end;
use it later as follows:
var
Hour, Min, Sec, MSec : Word;
CurrTime : TDateTime;
begin
CurrTime := Now+TZOffsetFromGMT/3600.0/24.0;
DecodeTime(CurrTime,Hour,Min,Sec,MSec);
...
end;...