Date/time types and functions

This test case it part of the test suite proposed for new devices.

Test case ID: R0150
Language: ST

Code:
tests2/t0150.st

PROGRAM TEST_R0150

    VAR
        tod0,tod1 , tod2 ,tod3 : TIME_OF_DAY;
        dt0,dt1 , dt2 ,dt3 ,dt4,dt5 : DATE_AND_TIME;
        t0,t1 ,t2 ,t3 : TIME;
        da0,da1 : DATE;
        
    END_VAR
    
    dt1 := DT#1986-01-29-08:40:00.12 ;
    
    dt2 := ADD_DT_TIME ( dt1 , T#2d_1h_1s );
    tod1 := DT_TO_TOD(dt1) ;

    da1 := DT_TO_DATE(dt1);
    t1 := T#01h00m01s244ms ;
    IF t1 <  T#3d_1h_1s_255ms THEN
         dt3 :=  ADD_DT_TIME(dt1 ,ADD_TIME(t1, t1)) ;
    END_IF;
    dt4 := DATE_TO_DT (da1 );
    t2 := DIVTIME(t1 , 3 ); 
    t2 := ADD_TIME(t2,  T#2d01h00m01s244ms);
    
    t3 := MULTIME(t1 , 0.25 );
    dt5 := CONCAT_DATE_TOD(DATE#1967-02-11, tod1 );

_GEB_ASSERT_(da0 = DATE#2000-01-01);
_GEB_ASSERT_(da1 = DATE#1986-01-29);
_GEB_ASSERT_(dt0 = DT#2000-01-01-00:00:00.000);
_GEB_ASSERT_(dt1 = DT#1986-01-29-08:40:00.120);
_GEB_ASSERT_(dt2 = DT#1986-01-31-09:40:01.120);
_GEB_ASSERT_(dt3 = DT#1986-01-29-10:40:02.608);
_GEB_ASSERT_(dt4 = DT#1986-01-29-00:00:00.000);
// _GEB_MSG_(DT_TO_STRING(dt5));
_GEB_ASSERT_(dt5 = DT#1967-02-11-08:40:00.120);
_GEB_ASSERT_(t0 = T#0s);
_GEB_ASSERT_(t1 = T#01h00m01s244ms);
_GEB_ASSERT_(t2 = T#2d01h20m01s658ms);
_GEB_ASSERT_(t3 = T#15m00s311ms);
_GEB_ASSERT_(tod0 = TOD#00:00:00.000);
_GEB_ASSERT_(tod1 = TOD#08:40:00.120);    

END_PROGRAM