Vai al contenuto
Vai all indice del manuale di programmazione

Dalla versione 5.20.x.xx LogicLab supporta operatori gestione data ed ora che possono essere utilizzati sia per estrarre informazioni che per eseguire operazioni.

TipoDescrizioneEsempio
DATE o D#32 bit senza segno (YYYY-MM-DD), range da 1970-01-01 a 2038-01-19.D#1980-01-05
LDATE o LD#64 bit senza segno (YYYY-MM-DD), range da 1970-01-01 a 2262-04-11.LD#1980-01-05
DATE_AND_TIME o DT#32 bit senza segno (YYYY-MM-DD-hh:mm:ss), range da 1970-01-01-00:00:00 a 2038-01-19-03:14:07.DT#1980-01-05-00:05:10
LDATE_AND_TIME o LDT#64 bit senza segno (YYYY-MM-DD-hh:mm:ss.ns), range da 1970-01-01-00:00:00 a 2262-04-11-23:47:16.854.LDT#1980-01-05-00:05:10.123456
TIME o T#32 bit con segno, range da -24d_20h_31m_23s_648ms a 24d_20h_31m_23s_647msT#20d5h4m7s20ms
LTIME o LT#64 bit con segno, range da -106751d_23h_47m_16s_854ms_775us_808ns a 106751d_23h_47m_16s_854ms_775us_807ns.LT#105d5h4m7s20ms50us30ns
TIME_OF_DAY o TOD#32 bit senza segno (hh:mm:ss.(ms)), range da 00:00:00.000 a 23:59:59.999.TOD#13:40:55.123
LTIME_OF_DAY o LTOD#64 bit senza segno (hh:mm:ss.(ns)), range da 00:00:00.000000000 a 23:59:59.999999999.LTOD#13:40:55.123456789

Funzioni divisione Data/Ora

Apposite funzioni di divisione permettono di suddividere gli operatori Data/Ora in variabili. Tutte le variabili ritornate sono di tipo INT, devono essere passati alla funzione gli indirizzi di allocazione. La struttura dati LDATETIMESTRUCT permette di aggregare tutte le variabili di Data/Ora.

FunzioneDescrizione
SPLIT_DATEDivide operatore DATE o LDATE nelle variabili anno, mese, giorno. La funzione restituisce FALSE in caso di errori.
SPLIT_DTDivide operatore DATE_AND_TIME nelle variabili anno, mese, giorno, ora, minuti, secondi. La funzione restituisce FALSE in caso di errori.
SPLIT_LDTDivide operatore LDATE_AND_TIME nelle variabili anno, mese, giorno, ora, minuti, secondi, millisecondi. La funzione restituisce FALSE in caso di errori.
SPLIT_TODDivide operatore TIME_OF_DAY nelle variabili ora, minuti, secondi, millisecondi. La funzione restituisce FALSE in caso di errori.
SPLIT_LTODDivide operatore LTIME_OF_DAY nelle variabili ora, minuti, secondi, millisecondi, microsecondi, nanosecondi. La funzione restituisce FALSE in caso di errori.

Funzioni concatenazione Data/Ora

Apposite funzioni di concatenazione permettono di unire le variabili in operatori Data/Ora.

FunzioneDescrizione
CONCAT_DATEConcatena variabili anno, mese, giorno nell’operatore DATE.
CONCAT_LDATEConcatena variabili anno, mese, giorno nell’operatore LDATE.
CONCAT_DTConcatena variabili anno, mese, giorno, ora, minuti, secondi nell’operatore DATE_AND_TIME.
CONCAT_LDTConcatena variabili anno, mese, giorno, ora, minuti, secondi, millisecondi, microsecondi, nanosecondi nell’operatore LDATE_AND_TIME.
CONCAT_TODConcatena variabili ora, minuti, secondi, millisecondi, nell’operatore TIME_OF_DAY.
CONCAT_LTODConcatena variabili ora, minuti, secondi, millisecondi, microsecondi, nanosecondi nell’operatore LTIME_OF_DAY.
CONCAT_DATE_TODConcatena variabili DATE e TIME_OF_DAY, nell’operatore DATE_AND_TIME.
CONCAT_DATE_LTODConcatena variabili DATE e LTIME_OF_DAY, nell’operatore LDATE_AND_TIME.

Esempi

Come utilizzare gli esempi.
Nel seguente esempio sono eseguite alcune operazioni su Data/Ora.

LogicLab (Ptp116, ST_DateTimeOperators)
PROGRAM ST_DateTimeOperators
VAR
    i : UDINT; (* Auxiliary variable *)
    DayOfWeek : SINT; (* Day of week *)
    BDTime : ARRAY[0..1] OF DATE_AND_TIME; (* Date and time buffer *)
    BDate : ARRAY[0..2] OF DATE; (* Date buffer *)
    LBDTime : ARRAY[0..1] OF LDATE_AND_TIME; (* Long date and time buffer *)
    LBDate : ARRAY[0..2] OF LDATE; (* Long date buffer *)
    LDTime : ARRAY[0..3] OF LDATETIMESTRUCT; (* Date/Time struct *)
END_VAR

// *****************************************************************************
// PROGRAM "ST_DateTimeOperators"
// *****************************************************************************
// Use of date operators.
// -----------------------------------------------------------------------------

    // -------------------------------------------------------------------------
    // 32 BITS DATE OPERATORS
    // -------------------------------------------------------------------------
    // Range from 1970-01-01 to 2038-01-19
    // Some operations on DATE variables.

    BDTime[0]:=TO_DATE_AND_TIME(SysDateGetS()); //Date and time buffer
    BDate[0]:=TO_DATE(BDTime[0]); //Date buffer
    BDate[1]:=CONCAT_DATE(2020, 6, 17); //Define date

    // Split and concat DATE to year, month and day.

    i:=SPLIT_DATE(BDate[0], ADR(LDTime[0].Year), ADR(LDTime[0].Month), ADR(LDTime[0].Day));
    BDate[2]:=CONCAT_DATE(LDTime[0].Year, LDTime[0].Month, LDTime[0].Day);

    // Split and concat DATETIME to year, month, day, hours, minutes and seconds.

    i:=SPLIT_DT(BDTime[0], ADR(LDTime[1].Year), ADR(LDTime[1].Month), ADR(LDTime[1].Day), ADR(LDTime[1].Hours), ADR(LDTime[1].Minutes), ADR(LDTime[1].Seconds));
    BDTime[1]:=CONCAT_DT(LDTime[1].Year, LDTime[1].Month, LDTime[1].Day, LDTime[1].Hours, LDTime[1].Minutes, LDTime[1].Seconds);

    // Get the day of week in a range from 0 (Sunday) to 6 (Saturday).

    DayOfWeek:=DAY_OF_WEEK(BDate[0]);

    // -------------------------------------------------------------------------
    // 64 BITS DATE OPERATORS
    // -------------------------------------------------------------------------
    // Range from 1970-01-01-00:00:00 to 2262-04-11-23:47:16.854
    // Some operations on DATE variables.

    LBDTime[0]:=TO_LDATE_AND_TIME(SysDateGetNs()); //Long date and time buffer
    LBDate[0]:=TO_LDATE(LBDTime[0]); //Long date buffer
    LBDate[1]:=CONCAT_LDATE(2020, 6, 17); //Define date

    // Split and concat LDATE to year, month and day.

    i:=SPLIT_DATE(LBDate[0], ADR(LDTime[2].Year), ADR(LDTime[2].Month), ADR(LDTime[2].Day));
    LBDate[2]:=CONCAT_LDATE(LDTime[2].Year, LDTime[2].Month, LDTime[2].Day);

    // Split and concat DATETIME to year, month, day, hours, minutes and seconds.

    i:=SPLIT_LDT(LBDTime[0], ADR(LDTime[3].Year), ADR(LDTime[3].Month), ADR(LDTime[3].Day), ADR(LDTime[3].Hours), ADR(LDTime[3].Minutes), ADR(LDTime[3].Seconds), ADR(LDTime[3].Milliseconds), ADR(LDTime[3].Microseconds), ADR(LDTime[3].Nanoseconds));
    LBDTime[1]:=CONCAT_LDT(LDTime[3].Year, LDTime[3].Month, LDTime[3].Day, LDTime[3].Hours, LDTime[3].Minutes, LDTime[3].Seconds, LDTime[3].Milliseconds, LDTime[3].Microseconds, LDTime[3].Nanoseconds);

    // Get the day of week in a range from 0 (Sunday) to 6 (Saturday).

    DayOfWeek:=DAY_OF_WEEK(LBDate[0]);

// [End of file]
Was this article helpful?