Vai al contenuto

SysDateLocalize, localize date and time

Vai all indice del manuale di programmazione
Tipo: Funzione
Libreria LogicLab: eLLabXUnified12Lib
Libreria Codesys: Non disponibile

Questa funzione permette di calcolare il valore di Data/Ora locale partendo dal valore UTC utilizzando il valore di TimeZone e DaylightZone definiti.

Approfondimenti
  • In questo topic un esempio di temporizzaztore giornaliero.

Descrizione

UTCDateTime (UDINT) Valore data in UTC espressa in secondi.
TimeZone (SINT) Fuso orario numero che indica la differenza in ore dell’ora locale rispetto al Tempo Coordinato Universale (UTC) riferito al meridiano di Greenwich. Per l’Italia il valore da definire è +1.
DaylightZone (DAYLIGHT_ZONE) Zona di cambio ora legale, il sistema provvede automaticamente al cambio di ora in base alla zona definita.

La funzione ritorna un UDINTcon il valore di data locale espressa in secondi.

Immagine F_SysDateLocalize

Esempi

Come utilizzare gli esempi.
Ad ogni secondo viene calcolato il valore di Data/Ora locale per l’Italia, valore calcolato in formato DATE_AND_TIME con risoluzione al secondo. Nell’esempio il valore è anche calcolato in LDATE_AND_TIME mantenendo la risoluzione al secondo, questo permette di passarlo come parametro alla funzione DateTimeFormat per la conversione in stringa.

LogicLab (Ptp116, ST_SysDateLocalize)
PROGRAM ST_SysDateLocalize
VAR
    Pulse : BOOL; (* One-Shot flag *)
    DTimeUTC : DATE_AND_TIME; (* UTC Date/Time (S) *)
    DTimeLocal : DATE_AND_TIME; (* Local Date/Time (S) *)
    LDTimeLocal : LDATE_AND_TIME; (* Local Date/Time (ns) *)
END_VAR

// *****************************************************************************
// PROGRAM "ST_SysDateLocalize"
// *****************************************************************************
// At every second it's returned the Date/Time for Italy.
// -----------------------------------------------------------------------------

    IF (SysClock1000 = Pulse) THEN RETURN; END_IF;
    Pulse:=SysClock1000; //One-Shot flag

    DTimeUTC:=TO_DATE_AND_TIME(SysDateGetS()); //UTC Date/Time
    DTimeLocal:=TO_DATE_AND_TIME(SysDateLocalize(SysDateGetS(), +1, DAYLIGHT_ZONE#DLZ_EUROPE)); //Local Date/Time (S)

    // Localized date/time in nanoseconds (1-second resolution).

    LDTimeLocal:=TO_LDATE_AND_TIME(TO_ULINT(DTimeLocal)*ULINT#1000000000); // Local Date/Time (ns)

// [End of file]

Was this article helpful?