VAR stTimezone : STRUCT bias : INT; // Base offset in minutes (e.g. 60 for CET) standardName : STRING[4]; // e.g. 'CET' standardBias : INT; // Usually 0 daylightName : STRING[4]; // e.g. 'CEST' daylightBias : INT := -60; // DST offset relative to standard (usually -60 min) standardDate : STRUCT // When to switch back to standard (Oct) month : USINT := 10; day : USINT; // 0 = Sunday hour : USINT := 3; week : USINT := 5; // 5 = last week END_STRUCT; daylightDate : STRUCT // When to switch to DST (March) month : USINT := 3; day : USINT; hour : USINT := 2; week : USINT := 5; END_STRUCT; END_STRUCT; END_VAR // Example: Set Europe/CET rules (last Sunday March/October) stTimezone.bias := 60; // UTC+1 standard stTimezone.standardBias := 0; stTimezone.daylightBias := -60; // +1 hour during DST stTimezone.standardName := 'CET'; stTimezone.daylightName := 'CEST'; // Standard → DST: last Sunday March at 02:00 local → clocks forward stTimezone.daylightDate.month := 3; stTimezone.daylightDate.week := 5; // 5 = last week stTimezone.daylightDate.day := 0; // 0 = Sunday stTimezone.daylightDate.hour := 2; // DST → Standard: last Sunday October at 03:00 local → clocks back stTimezone.standardDate.month := 10; stTimezone.standardDate.week := 5; stTimezone.standardDate.day := 0; stTimezone.standardDate.hour := 3; SET_TIMEZONE( TIMEZONE := stTimezone, RET_VAL => wRetVal, // 0 = OK STATUS => wStatus );