46 lines
1.7 KiB
Plaintext
46 lines
1.7 KiB
Plaintext
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
|
|
); |