SystemTime_To_UtcTime

Converts the time information from type TIMESTRUCT (system time format) to type T_UtcTime.

Namespace: Tc3_Collections
Library: Tc3_Collections (Tc3_Collections.compiled-library)

Syntax

FUNCTION SystemTime_To_UtcTime : T_UtcTime
VAR_INPUT
    in                    : TIMESTRUCT;
    wMicroseconds         : WORD(0..999);
    wNanoseconds          : WORD(0..999);
    bLeapSecondsKnown     : BOOL;
    bClockFailure         : BOOL;
    bClockNotSynchronized : BOOL;
    eAccuracy             : E_UtcTimeAccuracy;
END_VAR

SystemTime_To_UtcTime 1: Inputs

Name

Type

Description

in

TIMESTRUCT

The time information to be converted as a System-Time structure.

wMicroseconds

WORD(0..999)

Fraction of the millisecond in microseconds: „0..999“.

wNanoseconds

WORD(0..999)

Fraction of the microsecond in nanoseconds: „0..999“.

bLeapSecondsKnown

BOOL

Quality of the leap seconds:
"FALSE" := unknown;
"TRUE" := known;

bClockFailure

BOOL

Quality of the timer:
"FALSE" := good;
"TRUE" := erroneous;

bClockNotSynchronized

BOOL

Quality of the time synchronization:
"FALSE" := synchronized;
"TRUE" := not synchronized;

eAccuracy

E_UtcTimeAccuracy

Accuracy of the fraction of the second as an enumeration type.

SystemTime_To_UtcTime 2: Return value

Name

Type

Description

SystemTime_To_UtcTime

T_UtcTime

Converted time information as UTC-Time structure.

Sample

The time information: 2018-03-20-11:33:05.125000000 is converted with the max. accuracy of 24 bits (max. resolution ~60ns). The components of the system time have the following values:

wYear := 2018, wMonth := 3, wDay := 20, wHour := 11, wMinute := 33, wSecond := 5, wMilliseconds := 125, wDayOfWeek := 2.

METHOD UtcTime_ToFrom_SystemTime : BOOL
VAR
    tSystem       : TIMESTRUCT;
    sSystem       : STRING;
    tUtc          : T_UtcTime;
    sUtc          : STRING;
    wMicroseconds : WORD;
    wNanoseconds  : WORD;
END_VAR
tSystem.wYear := 2000;
tSystem.wMonth := 1;
tSystem.wDay := 1;
tSystem.wHour := 0;
tSystem.wMinute := 0;
tSystem.wSecond := 0;
tSystem.wMilliseconds := 0;
tSystem.wDayOfWeek := 0;
sSystem := SystemTime_To_String(tSystem);(* sSystem := '2000-01-01-00:00:00:000' *)
tUtc := SystemTime_To_UtcTime(tSystem, 0, 0, FALSE, FALSE, TRUE, E_UtcTimeAccuracy.Unspecified);
sUtc := UtcTime_To_String(tUtc);(* sUtc := 'UT#2000-01-01-00:00:00:000000000|001|31' *)

IF tUtc.quality.ClockNotSynchronized THEN
    tUtc.secondSinceEpoch := DT#2018-03-20-11:33:05;
    tUtc.fractionOfSecond := LTIME_TO_UtcTimeFractionOfSecond( LTIME#125MS0US0NS );
    tUtc.quality.LeapSecondsKnown := FALSE;
    tUtc.quality.ClockFailure := FALSE;
    tUtc.quality.ClockNotSynchronized := FALSE;
    Accuracy_To_UtcTimeQualityAccuracy( E_UtcTimeAccuracy._03, 
                                        bAccuracy0=>tUtc.quality.Accuracy0, 
                                        bAccuracy1=>tUtc.quality.Accuracy1, 
                                        bAccuracy2=>tUtc.quality.Accuracy2, 
                                        bAccuracy3=>tUtc.quality.Accuracy3, 
                                        bAccuracy4=>tUtc.quality.Accuracy4 );

    sUtc := UtcTime_To_String(tUtc);(* sUtc := 'UT#2018-03-20-11:33:05.125000000|000|3' *)
    tSystem := UtcTime_To_SystemTime(tUtc, wMicroseconds=>wMicroseconds, wNanoseconds=>wNanoseconds);
    sSystem := SystemTime_To_String(tSystem);(* sSystem := '2018-03-20-11:33:05.125' *)
END_IF


UtcTime_ToFrom_SystemTime := TRUE;