On Windows idGlobal.pas uses GetTimeZoneInformation to get the local Timezone information to correct the utc time. Somehow either the Linux part of the function OffsetFromUTC doesn't work correctly or you have the wrong timezone information set in your Linux installation.
TimeZoneBias() is a function in Indy's IdGlobalProtocols unit.
On most compilers and platforms, TimeZoneBias() is just a wrapper for returning the negative of the return value of the OffsetFromUTC() function in the IdGlobal unit:
Result := -OffsetFromUTC;
However, on *Nix systems, depending on how Indy is configured during compiling, OffsetFromUTC() will EITHER:
- use gettimeofday() and calculate an offset from it.
- use the global IdGlobal.GOffsetFromUTC variable, which is 0 by default and must be set manually in user code.
Make sure you are not falling into the latter case!